2012-10-27 56 views
3

我正在使用NetBeans開發Java應用程序。我在JFrame中有5 JTextFields和2 JTextArea。我想用循環立即清除它們。如何做呢?如何使用循環清除jframe的所有文本字段?

+4

使用'.getContentPane( ).getComponents()'在JFrame上獲取它的子級數組。迭代該數組,併爲每個項檢查'instanceOf TextComponent'如果是這樣,調用'setText(null)' –

回答

6

遍歷所有的組分和所有JTextFieldJTextArea對象的文本設置爲空字符串:

//Note: "this" should be the Container that directly contains your components 
//(most likely a JPanel). 
//This won't work if you call getComponents on the top-level frame. 
for (Component C : this.getComponents()) 
{  
    if (C instanceof JTextField || C instanceof JTextArea){ 

     ((JTextComponent) C).setText(""); //abstract superclass 
    } 
} 
+0

但textarea不清除。 –

+0

對於模糊不清,我表示歉意。對getComponents()的調用應該在包含所有組件的JPanel上進行,而不是頂層Frame,它的add(Component)方法實際上將組件添加到嵌套在JRootPane中的JPanel(因此它的getComponents()方法將只返回JRootPane)。我已經測試過這個方法,它完美的工作。 – ApproachingDarknessFish

+0

沒有明白。它不工作,只返回JRootPane。我在JFrame上試過這個...有什麼建議嗎? Component [] components = jframe.getRootPane()。getComponents(); –

2

適當的代碼應該是這樣一個

Component[] components = jframe.getContentPane().getComponents(); 
    for (Component component : components) { 
     if (component instanceof JTextField || component instanceof JTextArea) { 
      JTextComponent specificObject = (JTextComponent) component; 
      specificObject.setText(""); 
     } 
    } 
相關問題