自动调整JFrame中的JPanel大小

时间:2008-12-28 13:17:19

标签: java swing size jframe jpanel

我有一个JPanel子类,我在其上添加了buutons,标签,表格等。要在屏幕上显示,我使用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);

但是当我调整窗口大小时,面板的大小不会改变。即使调整大小,如何使面板的大小与窗口的大小相同?

5 个答案:

答案 0 :(得分:14)

你可以设置一个像BorderLayout这样的布局管理器,然后更具体地定义你的面板应该去的地方:

MainPanel mainPanel = new MainPanel();
JFrame mainFrame = new JFrame();
mainFrame.setLayout(new BorderLayout());
mainFrame.add(mainPanel, BorderLayout.CENTER);
mainFrame.pack();
mainFrame.setVisible(true);

这会将面板放入框架的中心区域,并在调整框架大小时自动增长。

答案 1 :(得分:1)

您需要为要使用的JFrame设置布局管理器 - 这将处理组件的定位方式。一个有用的是BorderLayout经理。

只需添加以下代码行即可解决您的问题:

mainFrame.setLayout(new BorderLayout());

(在将组件添加到JFrame之前执行此操作)

答案 2 :(得分:1)

如果我们的朋友提供的BorderLayout选项不起作用,请尝试将ComponentListerner添加到JFrame并实现componentResized(event)方法。调整JFrame对象的大小时,将调用此方法。因此,如果您在此方法中编写代码来设置JPanel的大小,您将获得预期的结果。

雅,我知道这个“解决方案”并不好,但可以将其用作安全网。 ;)

答案 3 :(得分:1)

根据我的经验,我使用了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的大小将自动更改,因此JScrollPane将自动重置滚动条。

答案 4 :(得分:0)

正如其他海报所说,您需要更改正在使用的LayoutManager。我总是喜欢使用GridLayout,因此您的代码将成为:

MainPanel mainPanel = new MainPanel();
JFrame mainFrame = new JFrame();
mainFrame.setLayout(new GridLayout());
mainFrame.pack();
mainFrame.setVisible(true);

当您希望面板占据整个屏幕时,GridLayout对我来说在概念上更正确。