将按钮存储到变量

时间:2017-10-09 17:03:43

标签: java user-interface

所以对于我的程序,我有三个按钮;

  • Button1:8
  • Button2:5
  • Button3:3
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应该按下该按钮

3 个答案:

答案 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 GameExit 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
    }

}