11

我有一个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);

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

4

5 回答 5

16

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

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

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

于 2008-12-28T15:10:23.847 回答
3

您需要为要使用的 JFrame 设置一个布局管理器 - 这涉及如何定位组件。一个有用的是 BorderLayout 管理器。

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

mainFrame.setLayout(new BorderLayout());

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

于 2008-12-28T14:18:12.843 回答
2

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

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

于 2009-01-03T10:04:00.503 回答
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 会自动重置滚动条。

于 2013-07-24T06:27:55.897 回答
0

正如其他海报所说,您需要更改正在使用的 LayoutManager。我总是更喜欢使用 GridLayout,这样你的代码就会变成:

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

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

于 2009-01-07T10:48:27.447 回答