我希望有一个内部(非窗口)对话框来询问成员输入。我希望将对话框集中放置在现有的 JPanel 上。
我看过 layeredpanes由于所有 Pane 中只有一个布局管理器(或没有布局管理器),这些似乎无法使用。我想我可以尝试覆盖 JLayeredPane 并提供自定义布局,但这似乎很极端。
Glass panes好像也不合适。
如何做到这一点? Swing 中没有可用的 z-index 概念吗?
编辑
分层 Pane 不合适的原因是由于缺少每层的布局管理器。面板可调整大小,面板 A 应保持在 100% 的区域,面板 B 应保持集中。
最佳答案
我认为 LayeredPane 是您最好的选择。您将需要第三个面板来包含 A 和 B。这第三个面板将是 layeredPane,然后面板 A 和 B 仍然可以有一个不错的 LayoutManagers。您所要做的就是将 B 置于 A 之上,在 Swing 路径中有很多关于如何做到这一点的示例。 Tutorial for positioning without a LayoutManager .
public class Main {
private JFrame frame = new JFrame();
private JLayeredPane lpane = new JLayeredPane();
private JPanel panelBlue = new JPanel();
private JPanel panelGreen = new JPanel();
public Main()
{
frame.setPreferredSize(new Dimension(600, 400));
frame.setLayout(new BorderLayout());
frame.add(lpane, BorderLayout.CENTER);
lpane.setBounds(0, 0, 600, 400);
panelBlue.setBackground(Color.BLUE);
panelBlue.setBounds(0, 0, 600, 400);
panelBlue.setOpaque(true);
panelGreen.setBackground(Color.GREEN);
panelGreen.setBounds(200, 100, 100, 100);
panelGreen.setOpaque(true);
lpane.add(panelBlue, new Integer(0), 0);
lpane.add(panelGreen, new Integer(1), 0);
frame.pack();
frame.setVisible(true);
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
new Main();
}
}
您可以使用 setBounds 将面板定位在分层 Pane 内并设置它们的大小。
编辑以反射(reflect)对原始帖子的更改 您将需要添加组件监听器,以检测何时调整父容器的大小,然后动态更改面板 A 和 B 的边界。
关于Java Swing - 如何在另一个面板上显示一个面板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/852631/