我的框架中有10个按钮。 我可以为所有人使用独特的动作监听器吗? 我的意思是不为每个人定义监听器,而是为所有人定义一个监听器。 请举个例子。 感谢
答案 0 :(得分:4)
你可以这样做,但是你必须将所有这些调用解复用到所有这些调用它们的“一个控制器”,除非你有一个独特的环境,所有的按钮应该做同样的事情。
那么解复用可能会涉及到一个开关(或者更糟糕的是,一堆if / then语句),并且该开关将成为一个维护问题。请参阅examples of how this could be bad here。
答案 1 :(得分: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);
// ...
答案 2 :(得分: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 );
等等
答案 3 :(得分: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);
答案 4 :(得分: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");