像这样具有几乎相同块的代码让我畏缩。再加上它加起来你有一千行代码,其中一半就足够了。当然,有一种方法可以创建一个循环来实现这一切,并且没有看起来如此简单和无脑的代码。
这样做似乎会添加尽可能多的代码,因为我试图减少:循环制作 5 个按钮,按钮的标签数组,背景数组......也许更多。即使事实证明这是可以接受的,我将如何制作一个循环来处理听众?我不能有一组方法,可以吗?我想这样的循环必须包含一个switch
. 是的?如果我不想寻求更好的解决方案,我可能会这样做。所以我问...
什么样的代码会听取整个按钮组并根据按下的按钮采取行动?我会将单个侦听器分配给哪个组件?如何?
(如果我意识到我已经知道如何做到这一点并且甚至不需要一开始就问,那么这个问题的答案可能会让我更加畏缩,而不是代码的重复性,但我'无论如何我都在问。我正处于大脑想要退出的那些我今天已经拥有它的点之一。)
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);
}
我不是要求任何人编写代码。我什至不想那样(但我不能忽视它!)。
以下是上面代码的作用: