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

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

有帮助吗?

解决方案

您可以设置布局管理器BorderLayout的一样,然后确定更具体的,在您的面板应该去:

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

此使所述面板到所述框架的中心区域,并允许它自动增长调整大小的帧时

其他提示

您需要设置对JFrame使用布局管理器 - 这与组件是如何定位的交易。一个有用的一种是BorderLayout管理。

简单地增加的下面一行代码应解决你的问题:

mainFrame.setLayout(new BorderLayout());

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

如果我们的朋友所提供的BorderLayout的选项亘古不变的工作,尝试添加ComponentListerner到JFrame和实施上的componentResized(事件)的方法。当JFrame的对象将被重新调整,这个方法会被调用。因此,如果你写的代码来设置JPanel的大小在该方法中,会达到预期的结果。

雅,我知道这“解决”不是很好,但是用它作为安全网。 ;)

根据我的经验,我使用了 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 中添加一些组件时,JScrollPane 中的 JPanel 的大小会自动改变,因此 JScrollPane 会自动重置滚动条。

由于其他海报说,你需要改变正在使用的布局管理。我使用的GridLayout总是优选因此您的代码将成为:

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

网格布局似乎更正确的概念对我来说,当你想你的面板占用整个屏幕。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top