如何找出屏幕上显示的java组件

时间:2012-03-07 13:47:59

标签: java swing user-interface

我想知道屏幕上是否有JPanel。这并不意味着isVisible()方法可以用于这种情况。我的意思是我想知道以前启动过的组件是否是我主面板上的组件之一。

编辑和更多解释:我之前在我的程序中启动了几个面板,并根据需要在我的表单上使用它们。我现在想知道jpanel1现在在我的表单上现在存在的任何面板上。

示例:

public class GUI extends JFrame() {

    private JPanel1, jPanel2;

    public static void main(String[] args) {
        GUI gui = new GUI();
        jPanel1 = new JPanel();
        jPanel2 = new JPanel();
        gui.setContentpane(jPanel1);
        gui.setVisible(true);
    }

}
现在jPanel1屏幕上显示jPanel2,{{1}}不可见。 我怎么能找到这个?

4 个答案:

答案 0 :(得分:12)

经过调查,我发现这种方法表示该组件是否显示在屏幕上:

  

isDisplayable()

在我的例子中:

  

jPanel1.isDisplayable() //返回true

     

jPanel2.isDisplayable() //返回false

就这么简单!

答案 1 :(得分:5)

jPanel1.isVisible()==true jPanel1.isVisible()==false

面板 jPanel1.isShowing()也有效

答案 2 :(得分:0)

如果您正在寻找主面板的子项,您可以在主面板上调用getComponents()以返回其组件的数组,然后遍历它们以检查它们中是否有任何一个是您的面板寻找。如果面板不是主面板的直接子节点,则可能需要递归调用此方法。

答案 3 :(得分:0)

编写扩展JPanel的自己的面板类。向名为isOnTheScreen()的此类添加一个新方法,该方法返回布尔值,指示该面板是否已添加到窗口中。

public class MyPanel extends JPanel
{
    boolean isAdded = false;

    public boolean isOnTheScreen()
    {
       return isAdded;
    }

    public void setOnTheScreen(boolean isAdded)
    {
       this.isAdded = isAdded;
    }
}

创建自己的面板对象后,使用上述方法了解是否将面板添加到主面板/框架中。假设您已将一个面板添加到框架中:

JFrame frame = new JFrame()
MyPanel panel = new MyPanel();
frame.getContentPane().add(panel);
panel.setOnTheScreen(true);

只要将其添加到主屏幕(在本例中为框架),请致电setOnTheScreen(true) 同样在删除面板时调用setOnTheScreen(false)

在此设计之后,您可以通过在代码中的任何其他位置调用isOnTheScreen()来确定是否将面板添加到主窗口。我希望这个设计可以帮助你。