JFrame的pack()方法不起作用(java,ubuntu)

Ali*_*ali 2 java ubuntu swing

我是java的新手.我只学习JPanel和JFrame.我从java软件解决方案中得到了这个说明:

"框架的包装方法根据其内容适当地设定尺寸 - 在这种情况下,框架的尺寸适合其所包含的面板的尺寸."

所以我写了这段代码:

public static void main (String [] args){
    JFrame frame = new JFrame("test");
    JPanel panel = new JPanel();
    JLabel label1= new JLabel("");
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
    //frame.setSize(1000, 500);
    frame.getContentPane().add(panel);
    Color darkBlue = new Color(8,40,94);
    panel.setSize(1000, 500);
    panel.setBackground(darkBlue);
}
Run Code Online (Sandbox Code Playgroud)

但它的结果是一个非常小的窗口,我应该用鼠标最大化它来查看内容但是当我设置框架大小时,每件事情都很棒!我使用Ubuntu.那么这个问题的原因是什么?

use*_*460 5

从您的代码顺序:

JFrame frame = new JFrame("test");
JPanel panel = new JPanel();
JLabel label1= new JLabel("");
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
Run Code Online (Sandbox Code Playgroud)

你之前没有在框架中添加任何东西pack().pack()意味着让框架根据添加到其中的组件决定其大小.

由于您之前没有添加任何组件,因此pack()您会收到一个内部没有任何内容的小窗口(直到您调整窗口大小).

调整框架大小时,将查询paintManager以绘制contentPane,因此如果在pack()之前添加,不仅框架将为您精心调整大小,其中的组件也将被绘制.


要查看JFrame中的组件:

public static void main (String [] args){
    JFrame frame = new JFrame("test");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JPanel panel = new JPanel();
    JLabel label1= new JLabel("");
    panel.add(label1);    //Add label to panel
    frame.add(panel);     //Add panel (with label) to frame 
    frame.pack();         //Let the frame adjust its size based on the added components
    frame.setVisible(true);
}
Run Code Online (Sandbox Code Playgroud)