如何同时显示2个不同的面板?

时间:2019-07-18 08:55:48

标签: java jpanel panel

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

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

1 个答案:

答案 0 :(得分:0)

将两者都添加到另一个面板中是必经之路!但是您必须为此“父”面板正确选择LayoutManager。让我举一个例子:

可以使用您选择的JFrame来设置Component的内容窗格(将所有LayoutManager添加到其中)。请参见此可运行示例,该示例以不同的颜色创建两个100x100像素的JPanel。面板正在使用您提到的LayoutManager,但是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);
    }

}

它看起来像这样:

enter image description here

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