我有两个带按钮对象的数组:
this.rightButtons = new JButton[MAX_RBUTTONS];
this.wrongButtons = new JButton[MAX_WBUTTONS];
我通过以下方法为每一个添加属性(颜色等):
private void preferences(String buttonType, int num) {
if (buttonType.equalsIgnoreCase("right")) {
this.rightButtons[num] = new JButton("");
this.rightButtons[num].setToolTipText("gg");
this.rightButtons[num].setPreferredSize(new Dimension(40, 40));
this.rightButtons[num].setBackground(Color.LIGHT_GRAY);
this.rightButtons[num].setOpaque(true);
this.add(this.rightButtons[num]);
} else if (buttonType.equalsIgnoreCase("wrong")) {
this.wrongButtons[num] = new JButton("");
this.wrongButtons[num].setToolTipText("gg");
this.wrongButtons[num].setPreferredSize(new Dimension(40, 40));
this.wrongButtons[num].setBackground(Color.LIGHT_GRAY);
this.wrongButtons[num].setOpaque(true);
this.add(this.wrongButtons[num]);
}
如您所见,它们具有相同的属性。有没有办法将此代码更改为较短的代码?唯一改变的是this.wrongButtons
和this.rightButtons
(数组名称)。
答案 0 :(得分:1)
只需将公共部分集中在一个方法中(并传递参数以获得更大的灵活性):
private JButton createButton(String tooltip, int width, int height, Color color){
JButton button = new JButton();
button.setToolTipText(tooltip);
button.setPreferredSize(new Dimension(width,height));
button.setBackground(color);
button.setOpaque(true);
return button;
}
然后叫它:
if (buttonType.equalsIgnoreCase("right")) {
this.rightButtons[num] = createButton("Is this the correct one?",40,40,Color.LIGHT_GRAY);
this.add(this.rightButtons[num]);
} else if (buttonType.equalsIgnoreCase("wrong")) {
this.wrongButtons[num] = createButton("Is this the correct one?",40,40,Color.LIGHT_GRAY);
this.add(this.wrongButtons[num]);
}
答案 1 :(得分:1)
是的,它非常简单 - 关于按钮的一切都与您存储它的位置相同。所以创建它,然后存储它:
private void preferences(String buttonType, int num) {
JButton button = new JButton("");
button.setToolTipText("gg");
button.setPreferredSize(new Dimension(40, 40));
button.setBackground(Color.LIGHT_GRAY)
button.setOpaque(true);
add(button);
JButton[] array = buttonType.equalsIgnoreCase("right")
? rightButtons : wrongButtons;
array[num] = button;
}
(这假设每个按钮类型都是“正确”或“错误”。)
我个人建议使用列表而不是数组,顺便说一句......