2012-03-07 78 views
6

我想知道一個JPanel是否在屏幕上。這並不意味着isVisible()方法可以用於這種情況。我的意思是我想知道一個已經啓動的組件,目前是否是我主面板上的組件之一。如何找出正在屏幕上顯示的java組件

編輯和更多解釋:我有幾個面板在我的程序之前啓動,並根據需要在我的表單中使用它們。我現在想要知道例如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是在屏幕上可見的BU jPanel2是不可見的。 我如何知道這一點?

+0

肯定是可能的,你能不能請用[SSCCE(http://sscce.org/),也許還有另一個編輯您的問題選擇 – mKorbel 2012-03-07 13:50:16

+2

你的意思是isShowing()?:http://docs.oracle.com/javase/6/docs/api/java/awt/Component.html#isShowing() – 2012-03-07 13:50:49

+0

@mKorbel:很清楚,我解釋爲I意思。 – sajad 2012-03-07 13:56:03

回答

10

調查後,我發現這種方法表示該組件顯示在屏幕上或不:

isDisplayable()

在我的例子

jPanel1.isDisplayable() //返回true

jPanel2.isDisplayable() //返回假

像這樣簡單!

+1

其中一種可能的方式+1 – mKorbel 2012-03-07 14:58:48

+0

@mKorbel所以我重新發明了輪子? :) – Juvanis 2012-03-07 15:04:53

+0

@deporter我認爲沒有:-),基本上你的答案是正確的方向,因爲你必須知道在任何時刻什麼,你的代碼在哪裏以及如何工作 – mKorbel 2012-03-07 16:20:57

0

如果您正在尋找主面板的孩子,您可以在主面板上調用getComponents()來返回其組件的數組,然後遍歷它們以檢查它們是否是您正在尋找的面板。如果面板不是主面板的直接子面,則可能需要遞歸調用。

+0

沒有先生我有幾個面板在我的程序之前啓動,並根據需要在我的表單中使用它們。我想知道現在在任何面板上現在出現在我的窗體上的jpanel1。 – sajad 2012-03-07 13:59:25

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()來確定面板是否添加到主窗口。我希望這個設計可以幫助你。

+1

謝謝,但這不是一個很乾淨的方法。這很難在我的所有面板中應用。我添加了一個我傾倒的例子。請看它 – sajad 2012-03-07 14:15:03

+0

@sajad這是一個非常乾淨的方式。如果你相信繼承的力量,那麼擴展jpanel應該不困難。無論如何,這只是一個建議,那麼你必須找到另一種解決方案。 – Juvanis 2012-03-07 14:19:01

+1

-1 a)複製現有的功能,只有更糟的(需要從客戶端代碼調用才能生效)b)如果你不需要子類化(_不應該是困難的,這不是一個足夠好的理由)。 @sajad well spotted :-) – kleopatra 2012-03-10 10:49:37

4

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

的面板 jPanel1.isShowing()也適用

+1

是的,'isShowing()'對於標籤中的組件正常工作 – BullyWiiPlaza 2016-05-21 14:26:13