我有一个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);
但是当我调整窗口大小时,面板的大小不会改变。即使调整大小,如何使面板的大小与窗口的大小相同?
答案 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 =垂直间隙。
例如,如果我想用:
代码如下:
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对我来说在概念上更正确。