我试图通过一个简单的GUI来使用ActionListeners和内部类,用户将按下一个按钮,这将导致显示一条消息。
我的代码编译 - 但是,在启动时,图标将出现在我的托盘(OSX)中,但随后立即终止。我的控制台中没有出现错误。
这是我的代码:
import javax.swing.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
public class GUI {
private JFrame myFrame;
private JPanel messagePanel;
private JPanel buttonPanel;
private JLabel myMessage;
public GUI() {
myFrame = new JFrame("My GUI");
messagePanel = new JPanel();
buttonPanel = new JPanel();
myMessage = new JLabel();
myFrame.setLayout(new BorderLayout());
myFrame.setSize(500, 500);
myFrame.add(messagePanel, BorderLayout.SOUTH);
myFrame.add(buttonPanel, BorderLayout.CENTER);
messagePanel.add(myMessage);
addButtons();
}
public void addButtons() {
JButton button1 = new JButton(new ImageIcon("circle.png"));
buttonPanel.add(button1);
button1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
myMessage.setText("Button pressed!");
}
});
}
public static void main(String[] args) {
GUI myGUI = new GUI();
}
}
这里发生了什么?
答案 0 :(得分:4)
您需要通过JFrame
myFrame.setVisible(true);
,myFrame
此外,您不应在Event Dispatch Thread (EDT)之外运行任何与Swing GUI相关的代码。启动程序的正确方法是:
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
GUI myGUI = new GUI();
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
答案 1 :(得分:1)
在构造函数中addButtons()
之后,添加以下语句:
myFrame.setVisible(true);