gpt4 book ai didi

java - 如何打印触发事件的按钮名称?

转载 作者:行者123 更新时间:2023-12-02 11:23:11 25 4
gpt4 key购买 nike

我已经制作了这个程序,当我单击某个按钮时,我想打印一条消息和按钮的名称。但它不会打印任何内容,也不会出现任何错误。

public class Example {

public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setTitle("Hello");
frame.setSize(400, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);

frame.setLayout(new BorderLayout());

JPanel buttonsPanel = new JPanel();
buttonsPanel.setLayout(new GridLayout(2, 2));

JTextArea txtArea = new JTextArea();
HelloActionListener listen = new HelloActionListener(txtArea);
JButton b1 = new JButton("TOP");
b1.addActionListener(listen);
JButton b2 = new JButton("LEFT");
JButton b3 = new JButton("RIGHT");
JButton b4 = new JButton("BOTTOM");
b4.addActionListener(listen);
}
}

以及类HelloActionListener:

public class HelloActionListener implements ActionListener {

public JTextArea area;

public HelloActionListener(JTextArea area) {
this.area = area;
}

@Override
public void actionPerformed(ActionEvent e) {
JButton x = (JButton) e.getSource();
area.setText("Hello Folks" + x.getText());
}
}

有人知道我的错误在哪里吗?

最佳答案

我发现三个主要问题。第一个是您没有将 Button 添加到您创建的 Jpanel (buttonsPanel),也没有添加buttonsPanel 添加到您的 frame 中,并且您也没有将 txtArea 添加到 frame 中。其次,你的操作顺序不对。我建议您在构建完框架后调用 frame.setVisible(true) 。第三个问题是您在 JFrame 上使用 BorderLayout,这并不是一个很好的布局(在我看来)。您的监听器和其他代码看起来都很好。

将代码更改为此似乎可以使其按需要运行:

public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setTitle("Hello");
frame.setSize(400, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new GridLayout(2,1));

JPanel buttonsPanel = new JPanel();
buttonsPanel.setLayout(new GridLayout(2, 2));

JTextArea txtArea = new JTextArea("Place Holder");
txtArea.setColumns(2);
HelloActionListener listen = new HelloActionListener(txtArea);
JButton b1 = new JButton("TOP");
b1.addActionListener(listen);
buttonsPanel.add(b1);
JButton b2 = new JButton("LEFT");
buttonsPanel.add(b2);
JButton b3 = new JButton("RIGHT");
buttonsPanel.add(b3);
JButton b4 = new JButton("BOTTOM");
b4.addActionListener(listen);
buttonsPanel.add(b4);

frame.add(txtArea);
frame.add(buttonsPanel);

frame.setVisible(true);
}

我建议阅读this guide关于 Java 中的布局管理器。尽管它在这里可以工作,但这并不是布局的好方法。

关于java - 如何打印触发事件的按钮名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49778961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com