WVr*_*ock 1 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);
}
}
Run Code Online (Sandbox Code Playgroud)
仅显示mainPanel的灰色背景。我究竟做错了什么?
将组件添加到JLayeredPane时,实际上是使用容器将组件添加到null布局中。这意味着您必须完全指定组件的大小和位置,并且经常通过setBounds(...)调用来解决。在panel1和panel2上调用它,例如:
panel1.setBounds(10, 10, 100, 100);
panel2.setBounds(70, 70, 100, 100);
Run Code Online (Sandbox Code Playgroud)
编辑:
设置界限没有任何区别
设置大小(边界)是必需的,但是仍然存在其他问题。
您正在将JLayeredPane添加到使用FlowLayout的JPanel中。默认情况下,FlowLayout遵循添加到其中的组件的首选大小。由于JLayeredPane使用空布局,因此其首选大小为(0,0),因此无需绘制任何内容。
两种解决方案:
frame.setContentPane(layers);JPanel mainPanel = new JPanel( new BorderLayout());| 归档时间: |
|
| 查看次数: |
2363 次 |
| 最近记录: |