【问题标题】:One action listener, two JButtons一个动作监听器,两个 JButton
【发布时间】:2013-01-04 18:43:49
【问题描述】:

我有两个JButtons,分别称为“左”和“右”。 “左”按钮将矩形对象向左移动,“右”按钮将其向右移动。 我在类中有一个ActionListener,它充当单击任一按钮时的侦听器。 但是,我希望在单击每个操作时发生不同的操作。如何区分ActionListener中的哪个被点击了?

【问题讨论】:

标签: java swing awt jbutton actionlistener


【解决方案1】:

为每个按钮设置actionCommand

// 为两个按钮设置动作命令。

 btnOne.setActionCommand("1");
 btnTwo.setActionCommand("2");

public void actionPerformed(ActionEvent e) {
 int action = Integer.parseInt(e.getActionCommand());

 switch(action) {
 case 1:
         //doSomething
         break;
 case 2: 
         // doSomething;
         break;
 }
}

更新:

public class JBtnExample {
    public static void main(String[] args) {
        JButton btnOne = new JButton();
        JButton btnTwo = new JButton();

        ActionClass actionEvent = new ActionClass();

        btnOne.addActionListener(actionEvent);
                btnTwo.addActionListener(actionEvent);

        btnOne.setActionCommand("1");
        btnTwo.setActionCommand("2");
    }
} 

class ActionClass implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {
        int action = Integer.parseInt(e.getActionCommand());
        switch (action) {
        case 1:
            // DOSomething
            break;
        case 2:
            // DOSomething
            break;                          
        default:
            break;
        }
    }
}

【讨论】:

  • 我觉得这个整体上比较优雅。谢谢!
  • 稍等一下,这是否要求 ActionListener 属于同一类?
  • 定义一个 ActionListener 类。在 UI 类中声明一个动作类的对象。使用 addActionListener 方法设置每个按钮 actionListener 并将此动作类引用添加为参数,最后为每个按钮设置动作命令。
【解决方案2】:

使用ActionEvent 可用的getSource() 方法非常简单:

JButton leftButton, rightButton;

public void actionPerformed(ActionEvent e) {
  Object src = e.getSource();

  if (src == leftButton) {

  }
  else if (src == rightButton) {

  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 2021-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多