【问题标题】:Resize JFrame to JPanels inside JLayeredPane在 JLayeredPane 中将 JFrame 调整为 JPanels
【发布时间】:2016-12-12 18:40:00
【问题描述】:

我正在使用 JLayeredPane 开发 Swing GUI。 JFrame 有一个 JLayeredPane,其中包含两个 JPanels。稍后我想在JPanels 中显示一些组件,我将这部分代码剪掉,以便您更短。

如何将JFrame 的大小调整为JPanels 的大小? 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 根据 JPanels 的大小动态调整大小。

【问题讨论】:

    标签: java swing jframe jpanel jlayeredpane


    【解决方案1】:

    正如How to Use Layered Panes: Laying Out Components in a Layered Pane 中所建议的那样,“虽然默认情况下分层窗格没有布局管理器,但您仍然可以为分层窗格分配布局管理器。”使用OverlayLayout,见here,用于重叠面板。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-05
      相关资源
      最近更新 更多