所以对于我的程序,我有三个按钮;
public void actionPerformed(ActionEvent e) {
JButton b1= (JButton) e.getSource();
JButton b2= (JButton) e.getSource();
String button= b1.getText();
String button2 = b2.getText();
System.out.println("b1: " + button);
System.out.println("b2: " + button2);
我试图检查按下哪些按钮并将它们存储到变量中。因此,当用户按下8时,按钮应为8,一旦按下任何第二个按钮,按钮2应该按下该按钮
答案 0 :(得分:1)
我是否制作了新的ActionEvent?
目前,您的按钮都指向相同的来源(即相同的按钮)
如果要触发的动作本质上相似(例如,MineSweeper中的按钮,它们是不同的按钮,但是要触发的动作是相同的),那么您不必创建多个动作侦听器多个按钮。您可以让按钮添加相同的动作侦听器:
//Example
class MyPanel extends JPanel{
private JButton btn1, btn2;
public MyPanel(){
btn1 = new JButton("Button 1");
btn2 = new JButton("Button 2");
ButtonHandler bn = new ButtonHandler();
btn1.addActionListener(bh);
btn2.addActionListener(bh);
}
}
事实上,你想要做的只是一个单行:
private class ButtonHandler implements ActionListener{
@Override
public void actionPerformed(ActionEvent e){
System.out.println((JButton)e.getSource().getText());
}
}
但是,如果您对不同的按钮有不同的操作(例如,Start Game
和Exit Game
),那么您可以为它们创建单独的动作侦听器。
答案 1 :(得分:0)
所以也许你想检查一下这个事件的来源?像:
public void actionPerformed(ActionEvent e) {
if (e.getSource() == b1) {
System.out.println("b1 pressed");
} else if (e.getSource() == b2) {
System.out.println("b2 pressed");
} else {
System.out.println("some other button pressed");
}
}
你应该在这个actionPerformed方法的范围之外创建不同的按钮!
修改强> user3437460的示例解决方案比这个好得多......
答案 2 :(得分:0)
每个组件都可以通过putClientProperty();
这种机制是一种映射,因此可以容纳很少的命名对象。我们只用一个。
这个obcjet(信息饼)对于用户来说是不可见的,它不是像getText()
这样的按钮上写的文本,只是为了消耗算法。不仅可以存在基元或字符串,还可以存在活动对象。
class MyPanel extends JPanel{
private JButton btn1, btn2;
public MyPanel(){
btn1 = new JButton("Button 1");
btn1.putClientProperty("myinternalsense", 8); // <-- here
btn2 = new JButton("Button 2");
btn1.putClientProperty("myinternalsense", 5); // <-- here
btn1.putClientProperty("myfunctor", new MyFunctor() ); // <-- here
ButtonHandler bn = new ButtonHandler();
btn1.addActionListener(bh);
btn2.addActionListener(bh);
}
}
此信息可在任何上下文中访问,例如,许多按钮的公共事件处理程序。
private class ButtonHandler implements ActionListener{
@Override
public void actionPerformed(ActionEvent e){
System.out.println((JButton)e.getSource().getClientPropertygetText("myinternasense")); // <-- here
}
}