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