3

例如,我的框架中有 10 个按钮。我可以为所有这些都使用一个独特的动作监听器吗?我的意思不是为每个人定义听众,而是为所有人定义一个听众。请举个例子。谢谢

4

5 回答 5

4

您可以这样做,但是您必须将所有这些呼叫解复用到控制所有这些呼叫的“一个控制器”,除非您有所有按钮都应该执行相同操作的独特情况。

这种多路分解可能会涉及一个开关(或更糟糕的是,一堆 if / then 语句),并且该开关将成为维护方面的难题。在这里查看这可能是多么糟糕的示例

于 2013-08-06T20:55:49.330 回答
2

检查source上的ActionEvent,并对每个按钮进行相等性检查,以查看导致ActionEvent. 然后,您可以对所有按钮使用单个侦听器。

    final JButton button1 = new JButton();
    final JButton button2 = new JButton();
    ActionListener l = new ActionListener() {
        public void actionPerformed(final ActionEvent e) {
            if (e.getSource() == button1) {
                // do button1 action
            } else if (e.getSource() == button2) {
                // do button2 action
            }
        }
    };
    button1.addActionListener(l);
    button2.addActionListener(l);
于 2013-08-06T20:56:53.570 回答
2
// Create your buttons.
JButton button1 = new JButton("Button 1");
JButton button2 = new JButton("Button 2");
JButton button3 = new JButton("Button 3");
// ...

// Create the action listener to add to your buttons.
ActionListener actionListener = new ActionListener() {
  public void actionPerformed(ActionEvent e) {
    // Execute whatever should happen on button click.
  }
}

// Add the action listener to your buttons.
button1.addActionListener(actionListener);      
button2.addActionListener(actionListener);
button3.addActionListener(actionListener);
// ...
于 2013-08-06T20:54:57.747 回答
2

是的,你当然可以

class myActionListener implements ActionListener {
    ...
    public void actionPerformed(ActionEvent e) {
        // your handle button click code
    }
}

在 JFrame 中

myActionListener listener = new myActionListener ();
button1.addActionListener(listener );
button2.addActionListener(listener );
button3.addActionListener(listener );

等等

于 2013-08-06T20:55:52.050 回答
1

您可以这样做,在actionPerformed方法中获取操作命令并为每个按钮设置操作命令

ActionListener al_button1 = new ActionListner(){
        @Override
        public void actionPerformed(ActionEvent e){
            String action = e.getActionCommand();
            if (action.equals("button1Command")){
                    //do button 1 command
            } else if (action.equals("button2Command")){
                    //do button 2 command
            }
            //...

        }
 }
 //add listener to the buttons
 button1.addActionListener(al_buttons)
 button2.addActionListener(al_buttons)
 // set actioncommand for buttons
 button1.setActionCommand("button1Command");
 button2.setActionCommand("button2Command");
于 2013-08-06T20:55:16.167 回答