BorderLayout 做了一些奇怪的事情。如果我将两个面板添加到具有相同约束的 Container
中(例如 BorderLayout.CENTER
),那么第一个面板就会消失,即使第二个面板被删除或创建看不见的
似乎将每个元素“堆叠”在前面的元素之上是有意义的。
这是正确的并且是有意设计的吗?如果是这样,有相关文档吗?
还有其他人为此感到沮丧吗?您有解决方案吗,例如自定义 LayoutManager
?
示例代码:
JFrame frame = new JFrame();
frame.setSize(500, 500);
JPanel panel1 = new JPanel();
panel1.setBackground(Color.blue);
frame.getContentPane().add(panel1);
JPanel panel2 = new JPanel();
panel2.setBackground(Color.red);
frame.getContentPane().add(panel2);
panel2.setVisible(false); // Seems like it should allow us to see panel1.
frame.setVisible(true);
这将创建并显示一个 500x500 的空白框。
最佳答案
BorderLayout
根本就不是为了执行您想要的操作而设计的。责任分离。如果您想要这种行为,您应该编写:将 BorderLayout
与 CardLayout
组合起来。但对于实际的堆栈行为,您必须自己编写一些代码(或者找到已经编写过代码的人)。
关于java - 为什么添加新组件时 BorderLayout 会覆盖组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3946799/