Java 显示GUI问题

Java 显示GUI问题,java,swing,awt,Java,Swing,Awt,我正在尝试显示gui,但无法获得要显示的框架。此处是迄今为止的代码: 这背后的思想是,字符串路径(即图像的路径)在另一个类中计算,然后将其传递给要显示图像的这个类 我无法显示帧,我通常的方法是: 新的显示窗口() 但这是行不通的 显示gui的最佳方法是什么 public class displayWindow { public displayWindow(String path) { JLabel label = new JLabel(); Image

我正在尝试显示gui,但无法获得要显示的框架。此处是迄今为止的代码:

这背后的思想是,字符串路径(即图像的路径)在另一个类中计算,然后将其传递给要显示图像的这个类

我无法显示帧,我通常的方法是:

新的显示窗口()

但这是行不通的

显示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();    
    }    
}

使用您提供的代码,您的代码甚至可以编译,因为您没有没有没有参数的默认构造函数。构造函数接受一个参数

因此,您的方法应该是:

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中,按照约定,类名以大写字母开头,所以类应该被称为
DisplayWindow
,这对于可读性非常重要


并在将组件添加到框架后调用
setVisible(true)
:)

使用您提供的代码,您的代码甚至可以编译,因为您没有不带参数的默认构造函数。构造函数接受一个参数

因此,您的方法应该是:

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中,按照约定,类名以大写字母开头,所以类应该被称为
DisplayWindow
,这对于可读性非常重要


并在将组件添加到框架后调用
setVisible(true)

frame.setVisible(true);最后(而不是重新绘制)?是否有理由设置布局2次?边界然后流布局?最后调用
setVisible
。请看一下。IntelliJ仍然不让我运行它。速度应该是多少?frame.setVisible(true);最后(而不是重新绘制)?是否有理由设置布局2次?边界然后流布局?最后调用
setVisible
。请看一看。IntelliJ仍然不让我运行它。速度应该是什么?在这种情况下Java会创建默认构造函数吗?我认为只有在程序员没有提供任何其他构造函数的情况下,才会创建构造函数。@PakkuDon
在这种情况下,Java会创建默认构造函数吗?
不会,他用一个参数编写构造函数,如果他想使用,他必须指定没有参数的默认构造函数。在这种情况下,Java会创建默认构造函数吗?我认为只有在程序员没有提供任何其他构造函数的情况下才创建构造函数。@PakkuDon
Java在这种情况下会创建默认构造函数吗?
否,他编写一个带一个参数的构造函数,然后如果他想使用,他必须指定不带参数的默认构造函数。