Swing:如何使用多个按钮?

时间:2015-08-18 07:40:52

标签: java swing button

我创建了这个小测试程序。它有2个按钮和2个标签。我想知道如何使用2个按钮。因此,当我按下按钮-1然后我更改text-1的文本,当我按下按钮-2然后我更改text-2的文本。我只是想知道如何使用多个按钮。

我的代码:

JLabel text1, text2;
JButton button1, button2;

public Game(String title) {
    super(title);
    setVisible(true);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    getContentPane().setLayout(new FlowLayout());

    addComponents();

    setSize(250, 250);
    setResizable(false);

}

public void addComponents() {
    text1 = new JLabel();
    getContentPane().add(text1, text2);

    text2 = new JLabel();
    getContentPane().add(text2);

    button1 = new JButton("Button");
    getContentPane().add(button1);
    button1.addActionListener(this);

    button2 = new JButton("Button 2");
    getContentPane().add(button2);
    button2.addActionListener(this);
}

@Override
public void actionPerformed(ActionEvent e) {


}

我是编程新手,所以如果有人可以为代码编写一些注释,我也希望如此。这样我就可以了解多个按钮的代码是如何工作的。

4 个答案:

答案 0 :(得分:2)

actionPerformed方法中,您可以获得操作的来源

@Override
public void actionPerformed(ActionEvent e) {

if(e.getSource() == button1){
 //Do Something
}else if(e.getSource() == button2){
 //Do Something Else
}

答案 1 :(得分:1)

有多种方法可以向按钮添加监听器,这里只有几个:

如果您不必在每个按钮中执行太多操作,则可以在每个按钮中添加内部侦听器

button1.addActionListener(new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent arg0) {
        // DO STUFF

    }
});

Common Listener

如果您有超过2个按钮(我猜您的应用会更大),您可以使用actionPerformed(ActionEvent e)获取操作来源

@Override
public void actionPerformed(ActionEvent e) {
    JButton source = (JButton) e.getSource();
    if(source.equals(button1)){
        // DO STUFF    
    }
}

使用actionCommand澄清

为了澄清这种方法,我建议您使用JButton.setActionCommand(stringCommand)之后使用switch

声明按钮:

button1.setActionCommand("command1");
button2.setActionCommand("command2");

ActionListener::actionPerformed()

public void actionPerformed(ActionEvent e) {
    String command = ((JButton) e.getSource()).getActionCommand();

    switch (command) {
    case "command1": 
        // DO STUFF FOR BUTTON 1
    break;
    case "command2": 
        // DO STUFF FOR BUTTON 2
    break;
    }
}

答案 2 :(得分:0)

在添加组件之前,不应使用setVisible(true)

有几种方法可以处理ActionEvent中的更多元素:

  • e.getSource()返回发生事件的对象。因此,如果按下button1,e.getSource()将与button1相同(因此e.getSource()==button1将为真)
  • 您可以为每个ActionEvent使用单独的类。如果你要添加ActionListener" Button1ActionEvent" [button1.addActionListener(new Button1ActionEvent());]你必须创建这个类,让它实现ActionListener并像你在主类中一样添加actionPerformed方法。此外,您可以在addActionListener-method [button1.addActionListener(new ActionListener() { // actionPerformed-method here });]
  • 中创建一个侦听器

答案 3 :(得分:0)

使用Java 8,添加ActionListeners更加简洁:

button.addActionListener(ae -> System.out.println("foo"));

使用多个陈述:

button.addActionListener(ae -> { 
    System.out.println("foo");
    System.out.println("bar");
});