このようなほぼ同一のブロックを含むコードは、私をうんざりさせます。さらに、1,000 行のコードがあれば、その半分で十分です。確かに、ループを作成してすべてを実現し、それほど洗練されておらず頭の悪いコードを持たないようにする方法はあります。
オフハンドでは、私が削減しようとしているのと同じくらい多くのコードを追加するように思われます: 5 つのボタンを作成するためのループ、ボタンのラベルの配列、背景の配列... 多分もっと。それが受け入れられることがわかったとしても、リスナーを処理するためにループを作成するにはどうすればよいでしょうか? メソッドの配列を持つことはできませんね。そのようなループには . を含める必要があると思いますswitch
。はい?より良い解決策を探したくない場合は、おそらくそうするでしょう。だから私は尋ねています...
ボタンのグループ全体をリッスンし、押されたボタンに基づいてアクションを実行するコードはどのようなものになるでしょうか? 単一のリスナーをどのコンポーネントに割り当てますか? そしてどうやって?
(その質問への答えは、コードの繰り返しの性質よりもさらにうんざりさせる可能性があります.その方法をすでに知っていて、そもそも尋ねる必要さえなかったことに気付いた場合、しかし私は.とにかく聞いてください.私は、脳がちょうど出たいと思っている今日のポイントの1つにいます.)
private void makeScoremasterBonuses(){
pnlBonuses = new JPanel(new GridLayout(1, 6));
pnlBonuses.setSize(6,1);
JButton t1 = (new JButton("3W"));
t1.setToolTipText("This is a triple-word cell.");
t1.setBackground(TRIPLE_WORD);
t1.setHorizontalAlignment(JButton.CENTER);
t1.addActionListener(new ActionListener() {
@Override public void actionPerformed(ActionEvent e) {
Highlighter.shadeSymmetric(currentCell,TRIPLE_WORD);
}});
JButton t2 = (new JButton("3L"));
t2.setToolTipText("This is a triple-letter cell");
t2.setBackground(TRIPLE_LETTER);
t2.setHorizontalAlignment(JButton.CENTER);
t2.addActionListener(new ActionListener() {
@Override public void actionPerformed(ActionEvent e) {
Highlighter.shadeSymmetric(currentCell,TRIPLE_LETTER);
}});
JButton t3 = (new JButton("2W"));
t3.setToolTipText("This is a double-word cell");
t3.setBackground(DOUBLE_WORD);
t3.setHorizontalAlignment(JButton.CENTER);
t3.addActionListener(new ActionListener() {
@Override public void actionPerformed(ActionEvent e) {
Highlighter.shadeSymmetric(currentCell,DOUBLE_WORD);
}});
JButton t4 = (new JButton("2L"));
t4.setToolTipText("This is a double-letter cell");
t4.setBackground(DOUBLE_LETTER);
t4.setHorizontalAlignment(JButton.CENTER);
t4.addActionListener(new ActionListener() {
@Override public void actionPerformed(ActionEvent e) {
Highlighter.shadeSymmetric(currentCell,DOUBLE_LETTER);
}});
JButton t5 = (new JButton(""));
t5.setToolTipText("No bonus");
t5.setBackground(WHITE);
t5.setHorizontalAlignment(JButton.CENTER);
t5.addActionListener(new ActionListener() {
@Override public void actionPerformed(ActionEvent e) {
Highlighter.shadeSymmetric(currentCell,B_NORMAL);
}});
pnlBonuses.add(new JLabel("Legend: "));
pnlBonuses.add(t1);
pnlBonuses.add(t2);
pnlBonuses.add(t3);
pnlBonuses.add(t4);
pnlBonuses.add(t5);
}
コードを書くように誰かに頼んでいるわけではありません。私はそれを望んでいません(しかし、私はそれを無視することはできませんでした!).
上記のコードが行うことは次のとおりです。