显示GUI问题

时间:2013-12-30 13:39:11

标签: java swing awt

我正在尝试显示一个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();    
    }    
}

1 个答案:

答案 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):)