【问题标题】:How can I display 2 different panels at the same time?如何同时显示 2 个不同的面板?
【发布时间】:2019-07-18 08:55:48
【问题描述】:

我的第一个面板的布局是 BorderLayout,我的第二个面板的布局是 GridBagLayout。我不知道如何同时显示它们。

我已经尝试在另一个面板上添加两个面板。

【问题讨论】:

  • 我猜因为不清楚是否有附加要求,所以这个问题的低质量并不明显。询问如何显示两个面板是有效的 - 这还不是全部。
  • 以最小尺寸提供 ASCII 艺术或 GUI 的 预期 布局的简单绘图,如果可调整大小,则具有更大的宽度和高度 - 以显示额外空间应该如何使用。

标签: java swing jpanel panel layout-manager


【解决方案1】:

将两者都添加到另一个面板是可行的方法!但是您必须为此“父”面板做出正确的LayoutManager 选择。举个例子吧:

JFrame 的内容窗格(您可以在其中添加所有Components)可以使用您选择的LayoutManager 进行设置。请参阅这个可运行的示例,它创建了两个不同颜色的 100x100 像素的 JPanels。面板使用您提到的LayoutManagers,但JFrame 的主要内容窗格设置为BoxLayout(水平,但您也可以将其设置为垂直!)。

您也可以对任何其他面板执行此操作。 panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS)); 就足够了。以下示例仅使用内容窗格,但您可以根据需要对其进行调整:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagLayout;

import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class TwoPanels extends JFrame {

    private static final long serialVersionUID = 1L;
    private static final Dimension DEFAULT_DIMENSION = new Dimension(100, 100);

    public static void main(String[] args) {
        new TwoPanels();
    }

    public TwoPanels() {
        //create panel 1
        JPanel panel1 = new JPanel(new BorderLayout());
        panel1.setPreferredSize(DEFAULT_DIMENSION);
        panel1.setBackground(Color.RED);

        //create panel 2
        JPanel panel2 = new JPanel(new GridBagLayout());
        panel2.setPreferredSize(DEFAULT_DIMENSION);
        panel2.setBackground(Color.GREEN);

        //set content pane layout
        setLayout(new BoxLayout(this.getContentPane(), BoxLayout.X_AXIS));

        //add to content pane
        add(panel1);
        add(panel2);

        //setup and display window
        pack();
        setVisible(true);
    }

}

看起来像这样:

编辑:您的问题有点不清楚您实际上想要堆叠覆盖面板。你可能会在这里找到你需要的东西:https://docs.oracle.com/javase/tutorial/uiswing/components/layeredpane.html

【讨论】:

  • 如何在第一个面板之上添加第二个面板?
  • 只需使用BoxLayout.Y_AXIS 而不是BoxLayout.X_AXIS。不要忘记按正确的顺序添加它们。
  • 我的意思是在另一个面板后面添加一个面板。
  • 在后面?所以一个面板被另一个面板隐藏了?你可以只用panel1.setVisible(false) 只用panel2,反之亦然。
  • 我想让两者都可见。那可能吗?就像第一个面板只是一个背景一样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-10
  • 2016-05-26
相关资源
最近更新 更多