将JFrame的大小调整为JLayeredPane中的JPanel

时间:2016-08-06 13:08:59

标签: java swing jframe jpanel jlayeredpane

我正在使用JLayeredPane开发Swing GUI。 JFrameJLayeredPane,其中包含两个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>

1 个答案:

答案 0 :(得分:3)

正如How to Use Layered Panes: Laying Out Components in a Layered Pane中所述,&#34;虽然默认情况下分层窗格没有布局管理器,但您仍然可以将布局管理器分配给分层窗格。&#34;使用OverlayLayout,见here,用于重叠面板。

或者,使用JInternalFrame 允许您单独pack()内部框架,如herehere所示。