Java:按钮数组 - 获取源代码

时间:2015-04-09 03:50:23

标签: java arrays jbutton actionlistener

假设我有一个按钮数组

private JButton[] myButtons = new JButton[5];

for (int i=0; i<5; i++)
{
    myButtons[i] = new JButton(Integer.toString(i));
    myButtons[i].setSize(50, 50);
    panel.add(myButtons[i]);
}

如何为这些按钮添加一个监听器,以便当我点击其中一个按钮时,我知道它在哪个数组位置索引?

2 个答案:

答案 0 :(得分:2)

你有点不在乎,首先在按钮上添加ActionListener

myButtons[i].addActionListener(this); // Or some other ActionListener

actionPeformed方法中,您可以使用ActionEvent#getSource

查找它所使用的按钮
@Override
public void actionPerformed(ActionEvent evt) {
    for (JButton btn : myButtons) {
        if (btn.equals(evt.getSource()) {
            // Do what ever you need
            break;
        }
    }
}

您还可以使用actionCommand

JButton属性
for (int i=0; i<5; i++)
{
    myButtons[i] = new JButton(Integer.toString(i));
    myButtons[i].setActionCommand("button " + i);
    myButtons[i].addActionListener(this);
    panel.add(myButtons[i]);
}

调用actionPeformed时,请使用ActionEvent#getActionCommand确定按下了哪个按钮。

更好的想法可能是为每个按钮创建一个专用的ActionListener ...

public class ButtonActionHandler implements ActionListener {
    private final JButton button;
    public ButtonActionHandler(JButton button) {
        this.button = button;
    }

    public void actionPerformed(ActionEvent evt) {
        // Do what ever you need to do with the button...
    }
}

for (int i=0; i<5; i++)
{
    myButtons[i] = new JButton(Integer.toString(i));
    myButtons[i].addActionListener(new ButtonActionHandler(myButtons[i]));
    panel.add(myButtons[i]);
}

另一个想法是利用Action API,它允许你定义一个自包含的实体,它能够配置按钮并自己处理相关的动作事件。有关详细信息,请参阅How to Use Actions

但是您可以使用哪些内容将归结为您首先需要识别按钮的原因。

答案 1 :(得分:0)

如果在类中实现ActionListener接口,则可以在循环中添加侦听器,如下所示。例如,

class TestGUI extends JPanel implements ActionListener{
 public TestGUI(){
  for(int i=0; i< 5; i++){
  ....
  myButtons[i].addActionListener(this);
 }
}

或者,如果你有单独的Listener类或方法。

myButtons[i].addActionListener(new MyListener());

比在actionPerformed方法,你可以点击按钮检查,

public void actionPerformed(ActionEvent e){
   if("0".equals(e.getActionCommand())){
     System.out.println("First button is clicked");
   }
   ... so on
}