使用JLayeredPane将多个JPanel添加到JPanel

时间:2014-12-13 14:19:01

标签: java swing jpanel jlayeredpane

我正在尝试将多个面板添加到另一个面板。我希望他们在彼此之上,所以我使用JLayeredPane。我已经为每个人添加了一个按钮。工作时应出现两个按钮。

import java.awt.Color;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;

public class PanelTest {
public static void main(String[] args) {
    JFrame frame = new JFrame();
    JPanel mainPanel = new JPanel();
    JPanel panel1 = new JPanel();
    JPanel panel2 = new JPanel();

    JLayeredPane layers = new JLayeredPane();
    mainPanel.add(layers);

    panel2.setOpaque(false);
    panel1.setOpaque(false);
    panel1.setVisible(true);
    panel2.setVisible(true);

    panel1.add(new JButton("1111111111"));
    panel2.add(new JButton("2"));

    frame.setContentPane(mainPanel);
    layers.add(panel1, new Integer(2));
    layers.add(panel2, new Integer(3));

    frame.setVisible(true);
    frame.setSize(500, 500);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

只能看到mainPanel的灰色背景。我做错了什么?

1 个答案:

答案 0 :(得分:5)

将组件添加到JLayeredPane时,您实际上是使用容器将组件添加到空布局。这意味着您必须完全指定组件的大小及其位置,通常使用setBounds(...)调用解决这两个问题。在panel1和panel2上调用它,例如:

panel1.setBounds(10, 10, 100, 100);
panel2.setBounds(70, 70, 100, 100);

编辑:

  

设置界限没有任何区别

需要设置大小(边界),但仍有其他问题。

您正在将JLayeredPane添加到使用FlowLayout的JPanel。默认情况下,FlowLayout会考虑添加到其中的组件的首选大小。由于JLayeredPane使用空布局,因此首选大小为(0,0),因此无需绘制任何内容。

两种解决方案:

  1. 您不需要JPanel,只需使用:frame.setContentPane(layers);
  2. 如果您确实想使用该面板,则需要更改布局管理器:JPanel mainPanel = new JPanel( new BorderLayout());