Java 在JFrame内自动调整JPanel的大小
我有一个Java 在JFrame内自动调整JPanel的大小,java,swing,size,jframe,jpanel,Java,Swing,Size,Jframe,Jpanel,我有一个JPanel子类,我在上面添加了按钮、标签、表格等。为了在屏幕上显示它,我使用JFrame: MainPanel mainPanel = new MainPanel(); //JPanel subclass JFrame mainFrame = new JFrame(); mainFrame.setTitle("main window title"); mainFrame.getContentPane().add(mainPanel); mainFrame.setLocation(10
JPanel
子类,我在上面添加了按钮、标签、表格等。为了在屏幕上显示它,我使用JFrame
:
MainPanel mainPanel = new MainPanel(); //JPanel subclass
JFrame mainFrame = new JFrame();
mainFrame.setTitle("main window title");
mainFrame.getContentPane().add(mainPanel);
mainFrame.setLocation(100, 100);
mainFrame.pack();
mainFrame.setVisible(true);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
但当我调整窗口的大小时,面板的大小不会改变。如何使面板的大小与窗口的大小相同,即使它已调整大小?您需要为JFrame设置一个要使用的布局管理器-这涉及组件的定位方式。一个有用的工具是BorderLayout管理器 只需添加以下代码行即可解决问题:
mainFrame.setLayout(new BorderLayout());
(在将组件添加到JFrame之前执行此操作)您可以设置类似BorderLayout的布局管理器,然后更具体地定义面板的位置:
MainPanel mainPanel = new MainPanel();
JFrame mainFrame = new JFrame();
mainFrame.setLayout(new BorderLayout());
mainFrame.add(mainPanel, BorderLayout.CENTER);
mainFrame.pack();
mainFrame.setVisible(true);
这会将面板置于框架的中心区域,并使其在调整框架大小时自动增长。如果我们的朋友提供的BorderLayout选项不起作用,请尝试将ComponentListerner添加到JFrame并实现ComponentResisted(event)方法。调整JFrame对象的大小时,将调用此方法。因此,如果您在这个方法中编写代码来设置JPanel的大小,您将获得预期的结果 是的,我知道这个“解决方案”不好,但把它当作一个安全网。
;) 正如其他海报所说,您需要更改正在使用的LayoutManager。我总是喜欢使用GridLayout,这样您的代码就会变成:
MainPanel mainPanel = new MainPanel();
JFrame mainFrame = new JFrame();
mainFrame.setLayout(new GridLayout());
mainFrame.pack();
mainFrame.setVisible(true);
当您希望您的面板占据整个屏幕时,GridLayout在概念上对我来说似乎更为正确。根据我的经验,我使用了GridLayout
thePanel.setLayout(new GridLayout(a,b,c,d));
a=行数,b=列数,c=水平间隙,d=垂直间隙
例如,如果我想使用以下内容创建面板:
- 无限行(设置a=0)
- 1列(设置b=1)
- 垂直间隙=3(设置d=3)
thePanel.setLayout(new GridLayout(0,1,0,3));
当您希望将JScrollPane添加到JPanel时,此方法非常有用。当您在JScrollPane中添加一些组件时,JPanel inside JScrollPane的大小将自动更改,因此JScrollPane将自动重置滚动条。进一步阅读。在这种情况下,重要的是JFrame的默认布局管理器是FlowLayout。BorderLayout.CENTER呢?我认为它主要用于此类情况。我的swing库中没有mainPanel clas!为什么?主面板由Igor编写;它是JPanel的一个子类,目前处于Swing中。当被迫在JLayeredPane中使用空布局时,这是一个很好的解决方案,谢谢!)