如何爲JFrame上的所有JPanel設置可見性? 我知道我可以爲每個面板使用JFrame.JPanel.setVisible,但我想爲所有人做它。如何爲JFrame上的所有JPanel設置可見性
這是非常有用的,因爲我不知道女巫面板是可見的。所以我想在操作後隱藏所有面板並顯示1或2個面板。
如何爲JFrame上的所有JPanel設置可見性? 我知道我可以爲每個面板使用JFrame.JPanel.setVisible,但我想爲所有人做它。如何爲JFrame上的所有JPanel設置可見性
這是非常有用的,因爲我不知道女巫面板是可見的。所以我想在操作後隱藏所有面板並顯示1或2個面板。
這是一個通用的方法。它通過在容器層次結構中所有組件recurively迭代,查找符合特定組件類的那些,並設置其Visible屬性:
static void setComponentVisibility(Container container,
Class<? extends Component> componentClass, boolean visible) {
for (Component c : container.getComponents()) {
if (componentClass.isAssignableFrom(c.getClass())) {
c.setVisible(visible);
} else if (c instanceof Container) {
setComponentVisibility((Container)c, componentClass, visible);
}
}
}
使用它是這樣的:
setComponentVisibility(frame, JPanel.class, false);
簡單的解決方案:
存儲您的所有面板的情況下,或在列表
通用的解決方案:
遍歷控件樹
private void setAllChildPanelsVisible(Container parent) {
Component[] components = parent.getComponents();
if (components.length > 0) {
for (Component component : components) {
if (component instanceof JPanel) {
((JPanel) component).setVisible(true);
}
if (component instanceof Container) {
setAllChildPanelsVisible((Container) component);
}
}
}
}
如何使用它:
@Test
public void testSetAllChildPanelsVisible() {
JFrame frame = new JFrame();
JPanel panel1 = new JPanel();
frame.getContentPane().add(panel1);
JPanel panel2 = new JPanel();
panel1.add(panel2);
panel1.setVisible(false);
panel2.setVisible(false);
assertFalse(panel1.isVisible());
assertFalse(panel2.isVisible());
setAllChildPanelsVisible(frame.getContentPane());
assertTrue(panel1.isVisible());
assertTrue(panel2.isVisible());
}
謝謝你您的全面答案。 – 110precent 2013-02-17 17:12:58
謝謝,非常有用的方法 – 110precent 2013-02-17 18:20:11