当前位置: 首页 > 知识库问答 >
问题:

将JFrame调整到JLayeredPane内的JPanels

华哲茂
2023-03-14

我正在使用 JLayeredPane 开发一个 Swing GUI。JFrame 有一个 JLayeredPane,其中包含两个 J 面板。后来我想在JPanels中显示一些组件,我剪掉了这部分代码,使它更短。

如何将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,但我提出这个问题是因为我希望< code>JFrame根据< code>JPanel的大小动态调整大小。

共有1个答案

濮佑运
2023-03-14

正如如何使用分层窗格:在分层窗格中布局组件中所建议的,“尽管分层窗格默认没有布局管理器,但您仍然可以为分层窗格分配布局管理器。”对于重叠的面板,请使用此处看到的Overlayout

或者,使用 JInternalFrame,它允许您单独打包()内部帧,如此处和此处所示。

 类似资料:
  • 我一直在关注Oracle的JLayeredPane教程,但它们的布局方式让我感到困惑,也没有理解我想要做什么。 我有一个应用程序,到目前为止还没有层的概念。所有东西都在JFrame中的一个单层中布局。

  • 但当我执行我的JFrame并单击该按钮时,JFrame不会出现。有谁能帮我一下吗? 谢谢!

  • 我制作了一个包含三个jpanel的jframe,这三个panel将jframe分成三个相等的部分。每一个面板都包含一个图像。我想调整图像和面板的大小,当帧的大小从高到低的时候。有人能告诉我如何做吗。

  • 我正在开发一个精灵编辑器。我有一个扩展JPanel的类,在该类中,我使用JLayeredPane作为容器。在底层,有一个带有ImageIcon的JLabel,在顶层有一个JPanel,我在其中绘制了一个网格。当代码运行时,我做了一些基本的数学运算,将JLayeredPane的首选大小设置为屏幕分辨率高度的85%左右。 我的问题是,当用户想要在其上绘制新画布时,我会用JOptionPane询问用户想

  • 问题内容: 允许用户调整窗口的宽度和高度。是否存在允许用户仅调整高度大小的方法? 谢谢。 编辑: 下面的解决方案似乎不起作用。在360x600 JFrame上, 仍然允许完全拉伸JFrame的宽度,而设置则不允许任何拉伸。 问题答案: 下面的代码可以正确完成工作。

  • 我对JPanel和JFrame还是个新手,可能没有按照我应该的方式使用它们。我正在尝试创建Pong游戏,在创建JFrame并将JPanel添加到它之后,我可以调整JPanel的大小,但我不知道如何调整JFrame的大小以适应它。Game类扩展了JPanel。 主: 编辑: 将setSize更改为setPreferredSize,然后为JFrame调用pack()就可以解决所有问题。