【问题标题】:JFrame appears blank instead of showing UIJFrame 显示为空白而不是显示 UI
【发布时间】:2018-10-27 09:37:28
【问题描述】:

我想在一段时间后打开 MainWindow(我创建并添加了 UI),但 Java 会打开空白的默认 Jframe。如何在启动画面 (Start) 后打开已创建的窗口?

public class Start extends JFrame{
        private JPanel panel1;

        public static void main(String[] args) {

            JFrame frame = new JFrame("Starting");
            frame.setContentPane(new Start().panel1);
            frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

            frame.setExtendedState(JFrame.NORMAL);
            frame.setUndecorated(true);
            //frame.setAlwaysOnTop(true);
            frame.setVisible(true);

            /*Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
            frame.setLocation(dim.width/2-frame.getSize().width/2, dim.height/2-frame.getSize().height/2);*/

            frame.toFront();
            frame.pack();

            frame.setLocationRelativeTo(null);

            Timer timer = new Timer(1000, new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {

                    new MainWindows().setVisible(true);
                    frame.setVisible(false);

                    //System.exit(0);
                }
            });

            timer.start();

        }

MainWindows.java

public class MainWindows extends JFrame{

    private JPanel panel;



    public static void main(String[] args)
    {

        boolean clicked = false;


        JOptionPane.showConfirmDialog(null, "Це перша вершія гри. Будь ласка, закрийте всі програми, щоб уникнути помилок.", "Увага!", JOptionPane.YES_OPTION);


        JFrame frame2 = new JFrame("Flying");
        frame2.setContentPane(new MainWindows().panel);
        frame2.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

        frame2.setExtendedState(JFrame.MAXIMIZED_BOTH);
        frame2.setUndecorated(true);
        frame2.setAlwaysOnTop(true);
        frame2.setVisible(true);

        frame2.toFront();
        frame2.pack();

【问题讨论】:

标签: java swing intellij-idea jframe


【解决方案1】:

您的MainWindow 类有一个从未调用过的静态main 方法。看起来很像那里的代码应该进入构造函数。

【讨论】:

    【解决方案2】:

    您在这个程序中似乎有两个主要方法。我建议从 MainWindows.java 中删除 main 方法,并将其中的代码移到 MainWindows 构造函数中。这将确保当您初始化新的 MainWindows() 对象时,新 JFrame 中的所有内容都应正确设置。

    MainWindows.java 中的代码:

        public MainWindows()
    {
    
        boolean clicked = false;
    
    
        JOptionPane.showConfirmDialog(null, "Це перша вершія гри. Будь ласка, закрийте всі програми, щоб уникнути помилок.", "Увага!", JOptionPane.YES_OPTION);
    
    
        JFrame frame2 = new JFrame("Flying");
        frame2.setContentPane(new MainWindows().panel);
        frame2.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
    
        frame2.setExtendedState(JFrame.MAXIMIZED_BOTH);
        frame2.setUndecorated(true);
        frame2.setAlwaysOnTop(true);
        frame2.setVisible(true);
    
        frame2.toFront();
        frame2.pack();
    

    【讨论】:

    • 确认对话框没有消失,当我评论它时,开始窗口也没有消失
    • 我不确定你的意思,但听起来你已经注释掉了代码?我的回答是把代码从 main 方法移动到构造函数并删除 main 方法,而不是注释掉任何代码。
    • 我这样做了。现在我在谈论 JOptionPane。它创造了无限。
    • 这可能是由于您使用了Timer。按照对原始问题的评论,确保此计时器不会重复,因为您只需要运行一次操作。
    • 在 frame2.setContentPane(new MainWindows().panel); 之后循环到 JOptionPane;
    【解决方案3】:

    我终于修好了。 frame2.setContentPane(panel); 谢谢大家的回答!

    【讨论】:

    • 很高兴听到这有效,请确保您接受答案,以防其他人遇到类似问题。
    • 对不起。未删除。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-06
    • 1970-01-01
    • 2011-09-28
    • 2020-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多