Java-面板与框架大小相同

Java-面板与框架大小相同,java,swing,Java,Swing,我对Java一无所知,我正在尝试编写我的第一个程序 但我已经遇到了第一个问题,我似乎无法在谷歌找到answar 我在里面做了一个JFrame和一个JPanel 我希望面板是一个特定的尺寸,但当我试图设置面板的尺寸时,它不起作用,面板正好适合框架的尺寸 package proj; import javax.swing.*; import java.awt.*; class Program { Program() { JFrame frame = new JFrame("

我对Java一无所知,我正在尝试编写我的第一个程序

但我已经遇到了第一个问题,我似乎无法在谷歌找到answar

我在里面做了一个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();
    }
}
package项目;
导入javax.swing.*;
导入java.awt.*;
班级计划{
程序(){
JFrame=新JFrame(“Mit计划”);
frame.setDefaultCloseOperation(关闭时退出frame);
frame.setVisible(true);
框架。设置尺寸(600400);
frame.setresizeable(false);
JPanel面板=新的JPanel();
面板设置可见(真);

panel.setSize(100100);//您可以像这样设置首选尺寸

panel.setPreferredSize(new Dimension(100, 100));
frame.add(panel);
frame.pack();
这是因为大多数情况下,尺寸由布局管理器决定。还可以添加“打包”功能


理想情况下,您应该使用布局管理器来实现此目的。

切勿使用
panel.setSize(100100);
而应使用
panel.setPreferredSize(100100);

另外,setSize应该在setVisible方法之后出现。

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

相反,您应该使用布局管理器为您确定组件的大小和布局。当您将组件添加到面板时,面板的首选大小将由您确定

同样在您当前的情况下,框架有一个默认的
BorderLayout
,它不考虑首选大小,因此即使是
setPreferredSize
也不起作用,因为您设置了框架的大小

  • 有关更多详细信息,请参阅

  • 也看到

  • 此外,还可以快速了解哪些布局会尊重组件的首选尺寸,哪些不会

  • 此外,通常,在添加所有组件后,应始终将框架设置为可见

  • 此外,swing应用程序应在事件调度线程(EDT)上运行。请参阅


大多数情况下,帧是正在进行大小调整的帧,而不是面板。请尝试不设置JFrame的大小,并使用setMinimumSize()setMaximumSize()和setPrteferredSize()查看。