我已经得到了一些帮助,但现在当我按下按钮时,没有任何反应。我想要在单击按钮时显示文本。如果是布局问题,我应该使用哪一个? 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) {}
}
答案 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);
}
}