我正在使用JLayeredPane
开发Swing GUI。 JFrame
有JLayeredPane
,其中包含两个JPanel
。后来我想在JPanel
中显示一些组件,我剪切了这部分代码,使其更短。
如何将JFrame
的大小调整为JPanel
的大小? frame.pack()
不起作用,如果没有行设置,GUI将以最小的尺寸显示首选大小。
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagLayout;
import javax.swing.JFrame;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
public class TestGUI {
private JFrame frame;
private JLayeredPane layeredPane;
private JPanel panelBottom;
private JPanel panelTop;
private MainMenuBar menuBar;
public TestGUI() {
// panel bottom:
panelBottom = new JPanel();
panelBottom.setSize(1000, 500);
panelBottom.setBackground(new Color(0, 100, 0, 100));
panelBottom.setLayout(new GridBagLayout());
// panel top:
panelTop = new JPanel();
panelTop.setSize(950, 450);
panelTop.setBackground(new Color(0, 0, 100, 100));
panelTop.setLayout(new GridBagLayout());
// layered pane:
layeredPane = new JLayeredPane();
layeredPane.add(panelBottom, 1);
layeredPane.add(panelTop, 0);
// frame building:
frame = new JFrame();
menuBar = new MainMenuBar();
frame.setJMenuBar(menuBar);
frame.setLayout(new BorderLayout());
frame.setPreferredSize(new Dimension(1100, 600)); // <-- Without this the GUI will be very small
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(layeredPane, BorderLayout.CENTER);
frame.pack(); // <-- does not work!
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
new TestGUI();
}
}
编辑:我可以更改首选大小行以适应最大的JPanel,但我问这个问题是因为我希望JFrame
根据动态JPanel
的大小调整大小。 / p>
答案 0 :(得分:3)
正如How to Use Layered Panes: Laying Out Components in a Layered Pane中所述,&#34;虽然默认情况下分层窗格没有布局管理器,但您仍然可以将布局管理器分配给分层窗格。&#34;使用OverlayLayout
,见here,用于重叠面板。
或者,使用JInternalFrame
, 允许您单独pack()
内部框架,如here和here所示。