有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么我的JFrame在Mac上启动时会随机收缩?

在使用mac笔记本电脑时,我最近注意到,当程序启动时,我的框架有时会收缩。它大约有70-90%会收缩

它可以在PC上正常工作,但在我试过的任何mac上都不行。我试图缩小它的范围(到下面的代码),但从这里我找不到它不工作的任何原因。我的一些朋友认为这可能与mac自己的窗口管理器有关。我不知道

我对这方面还比较陌生,仅供参考

public class Worms extends JFrame{

    public static void main(String[] args) {
        new Worms();
    }

    private JButton startGame;
    public Worms(){
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();

        Container contentPane = this.getContentPane();
        //if i change it so it uses a new dimension not "screenSize" it works
        contentPane.setPreferredSize(screenSize);


        JPanel menu = new JPanel();

        startGame = new JButton("Start Game"); 
        menu.add(startGame);//or if i remove this button it also works
        this.add(menu);


        this.pack();
        this.setVisible(true);
    }
}

它从“全屏”开始,然后缩小到左角。如果我把它拖回正常大小,它就会正常工作


共 (1) 个答案

  1. # 1 楼答案

    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    
    Container contentPane = this.getContentPane();
    //if i change it so it uses a new dimension not "screenSize" it works
    contentPane.setPreferredSize(screenSize);
    

    内容窗格的首选大小应设置为屏幕大小。这太大了,不包括框架装饰或“铬”

    这里有一种不同的方法,可以跨系统可靠地工作。它设置帧的扩展状态

    import java.awt.*;
    import javax.swing.*;
    
    public class Worms extends JFrame{
    
        public static void main(String[] args) {
            new Worms();
        }
    
        private JButton startGame;
        public Worms(){
            JPanel menu = new JPanel();
    
            startGame = new JButton("Start Game"); 
            menu.add(startGame);
            this.add(menu);
    
            this.pack();
            // this should do what you seen to want
            this.setExtendedState(JFrame.MAXIMIZED_BOTH);
            // this is just polite..
            this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            this.setVisible(true);
        }
    }
    

    请注意,应该创建Swing/AWT GUI&;在事件调度线程上更新。为了简单起见,上面的例子没有添加这一点