[英]Java, using one ActionListener for multiple radio buttons
我在面板中有六个单选按钮,我想在面板上单击鼠标,然后确定选择了哪个单选按钮,并相应地执行操作。
但是当我设置这种情况并尝试它时,在动作监听器中有一个断点,代码似乎根本不会调用动作监听器。 任何解释为什么会这样,或者避免为每个按钮编写动作监听器的替代方法,将不胜感激。
提前感谢任何提示。
约翰多纳
此代码将循环并以编程方式添加列表。
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
public class Test {
public Test() {
JFrame frame = new JFrame();
JPanel panel = new JPanel();
ButtonGroup bg = new ButtonGroup();
for (int i = 0; i < 6; i++) {
JRadioButton rb = new JRadioButton();
// ID of Button
rb.setActionCommand("button " + i);
try {
//method to call, after pressed a button
Method m = getClass()
.getDeclaredMethod("RadioButton" + (i+1), null);
ActionListener al = new MyActionListener(m, this);
rb.addActionListener(al);
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//
bg.add(rb);
panel.add(rb);
}
frame.setContentPane(panel);
frame.setVisible(true);
frame.pack();
}
/*buttons actions*/
public void RadioButton1() {
System.out.println("Boton1");
}
public void RadioButton2() {
System.out.println("Boton2");
}
public void RadioButton3() {
System.out.println("Boton3");
}
public void RadioButton4() {
System.out.println("Boton4");
}
public void RadioButton5() {
System.out.println("Boton5");
}
public void RadioButton6() {
System.out.println("Boton6");
}
public static void main(String[] args) {
new Test();
}
class MyActionListener implements ActionListener {
Method call = null;
Object object;
public MyActionListener(Method m, Object value) {
call = m;
object = value;
}
@Override
public void actionPerformed(ActionEvent e) {
try {
//call method
call.invoke(object, null);
} catch (IllegalArgumentException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IllegalAccessException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (InvocationTargetException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
单选按钮正在吞下这个事件,而它永远不会影响到JPanel。 如果您想知道按下了哪个按钮,则需要为每个按钮添加动作侦听器。 看一下使用单选按钮的路径
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.