我正在尝试显示一个gui但是无法显示这里显示的帧是到目前为止的代码:
这背后的想法是,字符串路径(它是图像的路径)是在另一个类中计算的,然后传递给这个要显示图像的类。
我无法显示框架,我通常的方法是:
new displayWindow();
但这不起作用。
显示gui的最佳方法是什么?
public class displayWindow {
public displayWindow(String path) {
JLabel label = new JLabel();
ImageIcon icon = new ImageIcon(speed);
label.setIcon(icon);
label.setText(path);
JPanel panel = new JPanel();
panel.add(label);
JFrame frame = new JFrame("Speed Limit");
frame.setSize(500, 500);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
frame.setVisible(true);
System.out.println(path);
frame.setLayout(new BorderLayout());
frame.setLayout(new FlowLayout());
frame.setSize(430, 430);
frame.getContentPane().removeAll();
frame.getContentPane().add(panel);
frame.repaint();
}
public static void displayWindow() {
new displayWindow();
}
}
答案 0 :(得分:4)
使用您提供的代码,您的代码甚至编译,因为您没有没有args的默认构造函数。您的构造函数需要一个参数。
所以你的方法应该是:
public static void displayWindow(String param) {
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run(){
new displayWindow(param);
}
});
}
使用SwingUtilities.invokeLater(..)
确保它将在EDT
(事件调度线程)中运行。
这是否有原因?
frame.setLayout(new BorderLayout());
frame.setLayout(new FlowLayout());
frame.setSize(430, 430);
在java中按类型约定类名以upperCase开头,因此你应该调用类DisplayWindow
这对于可读性非常重要。
在向框架添加组件后调用setVisible(true)
:)