0

我已经得到了一些帮助,但是现在当我按下按钮时,什么也没有发生。我希望在您单击按钮时显示文本。如果是布局问题,我应该使用哪一个?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) {}
}
4

3 回答 3

1

For this you should use the 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");

And then in your actionPerformed():

public void actionPerformed(ActionEvent e) {
  String command = event.getActionCommand();
  if("upper".equals(command)){
    //Do something
  } else if("lower".equals(command)){
    //Do something
  }
}
于 2014-05-14T19:09:45.287 回答
1
public void actionPerformed(ActionEvent e) {
    if (e.getSource() == b1) {
        // do stuff
    } else if (e.getSource() == b2) {
        // do other stuff
    }
}

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

于 2014-05-14T19:09:11.417 回答
0

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

我用过Lambda 表达式。因此,您必须拥有 jdk8 才能运行以下代码。如果此代码不适合您,请不要打分。去拿 jdk8。

如果您对 Lambda 表达式不满意。然后按照以下说明进行操作:-

创建一个内部类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);
    }
}
于 2014-05-14T21:08:10.030 回答