【问题标题】:Java - panel is the same size as frameJava - 面板与框架大小相同
【发布时间】:2014-04-25 12:12:29
【问题描述】:

我是 Java 新手,我正在尝试编写我的第一个程序..

但是我已经遇到了第一个问题,我似乎无法在 google 上找到答案。

我在里面做了一个 JFrame 和一个 JPanel。

我希望面板是特定的尺寸,但是当我尝试设置面板的尺寸时,它不起作用,面板正好适合框架的尺寸。

package proj;

import javax.swing.*;
import java.awt.*;

class Program {
    Program() {
        JFrame frame = new JFrame("Mit program");
        frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        frame.setSize(600, 400);
        frame.setResizable(false);

        JPanel panel = new JPanel();
        panel.setVisible(true);
        panel.setSize(100,100); // <- Why doesn't this work?
        panel.setBorder(BorderFactory.createLineBorder(Color.black));
        frame.add(panel);
    }
}

public class Proj {
    public static void main(String[] args) {
        new Program();
    }
}

【问题讨论】:

标签: java swing


【解决方案1】:

永远不要使用panel.setSize(100,100);,而是使用panel.setPreferredSize(100,100); setSize 也应该在 setVisible 方法之后。

【解决方案2】:

不要担心设置大小甚至设置首选大小,正如其他答案所建议的那样(除非您正在进行自定义绘画,在这种情况下,您需要覆盖 getPreferredSize() 而不是 setPreferredSize()) .

您应该改用布局管理器来为您处理组件的大小和布局。当您向面板添加组件时,将为您处理面板的首选尺寸。

同样在你当前的情况下,框架有一个默认的BorderLayout尊重首选尺寸,所以即使setPreferredSize 也不起作用,因为你设置了你的框架。

【讨论】:

    【解决方案3】:

    您可以像这样设置首选尺寸

    panel.setPreferredSize(new Dimension(100, 100));
    frame.add(panel);
    frame.pack();
    

    这是因为大多数时候大小是由布局管理器决定的。同时添加打包功能。

    理想情况下,您应该为此使用布局管理器。 http://docs.oracle.com/javase/tutorial/uiswing/layout/using.html#sizealignment

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-01
      • 2017-06-06
      • 2015-12-31
      • 2011-01-27
      • 2015-06-18
      • 2012-03-13
      相关资源
      最近更新 更多