在ActionEvent中使用多个按钮

时间:2014-05-14 19:00:19

标签: java actionevent

我已经得到了一些帮助,但现在当我按下按钮时,没有任何反应。我想要在单击按钮时显示文本。如果是布局问题,我应该使用哪一个? FlowLayout对此程序不起作用,因为它会扭曲按钮。

import java.awt.*;
import java.awt.event.*;

public class Option3 extends Frame implements WindowListener,ActionListener
{
    Label l1;
    Label l2;
    Label l3;
    Button b1;
    Button b2;
    Button b3;
    public static void main(String[] args)
    {
        Option3 o3 = new Option3("Press a Button");
        o3.setSize(700,350);
        o3.setVisible(true);
    }
    public Option3(String option3)
    {
        super(option3);
        setLayout(null);
        addWindowListener(this);

        Label l1 = new Label();
        l1 = new Label();
        l1.setBounds(50,150,125,50);
        l1.setVisible(true);
        add(l1);

        Label l2 = new Label();
        l2 = new Label();
        l2.setBounds(275,150,125,50);
        l2.setVisible(true);
        add(l2);

        Label l3 = new Label();
        l3 = new Label();
        l3.setBounds(500,150,125,50);
        l3.setVisible(true);
        add(l3);

        Button b1 = new Button();
        b1 = new Button();
        b1.addActionListener(this);
        b1.setBounds(25,100,175,175);
        add(b1);

        Button b2 = new Button();
        b2 = new Button();
        addWindowListener(this);
        b2.addActionListener(this);
        b2.setBounds(250,100,175,175);
        add(b2);

        Button b3 = new Button();
        b3 = new Button();
        b3.addActionListener(this);
        b3.setBounds(475,100,175,175);
        add(b3);
    }
    public void actionPerformed(ActionEvent e) {
        if(e.getSource() == b1)
        {
            l1.setText("You pressed button 1.");
        }
        else if (e.getSource() == b2)
        {
            l2.setText("You pressed button 2.");
        }
        else if (e.getSource() == b3)
        {
            l3.setText("You pressed button 3.");
        }
    }
    public void windowClosing(WindowEvent e)
    {
        dispose();
        System.exit(0);
    }
    public void windowActivated(WindowEvent e) {}
    public void windowClosed(WindowEvent e) {}
    public void windowDeactivated(WindowEvent e) {}
    public void windowDeiconified(WindowEvent e) {}
    public void windowIconified(WindowEvent e) {}
    public void windowOpened(WindowEvent e) {}
}

3 个答案:

答案 0 :(得分:1)

public void actionPerformed(ActionEvent e) {
    if (e.getSource() == b1) {
        // do stuff
    } else if (e.getSource() == b2) {
        // do other stuff
    }
}

e.getSource()返回触发事件的对象引用。

答案 1 :(得分:1)

为此你应该使用actionCommand:

//after object creation:
firstButton.setActionCommand("upper");
firstButton.addActionListener(this);// if this object is the listener
secondButton.addActionListener(this);// if this object is the listener
secondButton.setActionCommand("lower");

然后在你的actionPerformed():

public void actionPerformed(ActionEvent e) {
  String command = event.getActionCommand();
  if("upper".equals(command)){
    //Do something
  } else if("lower".equals(command)){
    //Do something
  }
}

答案 2 :(得分:0)

首先,我更喜欢 Swing 而不是 AWT 。以下代码显示了一个带有3个按钮的JFrame。如果单击一个按钮,它将显示一个对话框,告诉您单击了哪个按钮。

  

我使用了 Lambda表达式。所以,你必须有jdk8才能运行   以下代码。如果此代码对您不起作用,请不要降价。   只是去&抓住jdk8。

如果您对Lambda Expression不满意。然后按照以下说明操作: -
 
创建内部类ListenForButton implements ActionListener
在重写方法定义中写入逻辑。然后将此监听器添加到您的按钮中,作为
b1.addActionListener(new ListenForButton())


import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class Option3 extends JFrame {

    JButton b1, b2, b3;
    JPanel jp1;

    private void initComponents() {
        jp1 = new JPanel();
        add(jp1);

        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        b1 = new JButton("Button1");
        b1.addActionListener(e -> {
            JOptionPane.showMessageDialog(this, "Button1 clicked");
        });
        jp1.add(b1);

        b2 = new JButton("Button2");
        b2.addActionListener(e -> {
            JOptionPane.showMessageDialog(this, "Button2 clicked");
        });
        jp1.add(b2);

        b3 = new JButton("Button3");
        b3.addActionListener(e -> {
            JOptionPane.showMessageDialog(this, "Button3 clicked");
        });
        jp1.add(b3);
        pack();

    }

    public static void main(String[] args) {
        new Option3("Press a Button").setVisible(true);
    }

    public Option3(String option3) {
        super(option3);
        initComponents();
        this.setLocationRelativeTo(null);
    }
}