我有26个变量(case1,case2,...)
我有26个按钮。 (btnCase1,btnCase2等)
有没有办法做到这一点;
final JButton btn18 = new JButton("18");
btn18.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
btn18.setText(Integer.toString(cases[18]));
picked = cases[18];
btn18.setEnabled(false);
btnNext.doClick();
casesPicked++;
}
});
btn18.setBounds(785, 281, 100, 100);
frame.getContentPane().add(btn18);
final JButton btn19 = new JButton("19");
btn19.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
btn19.setText(Integer.toString(cases[19]));
picked = cases[19];
btn19.setEnabled(false);
btnNext.doClick();
casesPicked++;
}
});
有没有办法这样说:
final JButton btn18 = new JButton("18");
btn18.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int i = 18
btn[i].setText(Integer.toString(cases[i]));
picked = cases[i];
btn[i].setEnabled(false);
btnNext.doClick();
casesPicked++;
}
});
我需要稍后在代码中能够做到这一点,以回想已经选择了哪种情况。
这是我当前的完整代码。 http://pastebin.com/9Am3jMQ8可能是你们读过的最糟糕的代码。
最佳答案
您可以采用数组的值并将其用于变量中吗?
是。
我会为您的ActionListener
创建一个类。您可以在其中精确定义所需的操作,并提供所需的数据。
class MyActionListener implements ActionListener
{
private final JButton button;
private final JButton btnNext;
private final int index;
public MyActionListener(final int index,
final JButton button,
final JButton btnNext)
{
this.index = index;
this.btnNext = btnNext;
this.button = button;
}
@Override
public void actionPerformed(final ActionEvent event)
{
picked = cases[i];
this.button.setText( Integer.toString(cases[i]) );
this.button.setEnabled(false);
this.btnNext.doClick();
casesPicked++;
}
}
然后您可以设置without repeating yourself:
final JButton btn18 = new JButton("18");
btn18.addActionListener( new MyActionListener(18, btn18, btnNext) );
frame.getContentPane().add(btn18);
final JButton btn19 = new JButton("19");
btn19.addActionListener( new MyActionListener(19, btn19, btnNext) );
frame.getContentPane().add(btn19);
然后,您可以轻松地将按钮创建更改为使用循环:
for (int btnNum = 0 ; btnNum < 20 ; i += 1)
{
final JButton btn = new JButton( ""+btnNum );
btn.addActionListener( new MyActionListener(btnNum, btn, btnNext) );
frame.getContentPane().add(btn);
}