2016-09-19 157 views
0

我有一個JTextField,我想在運行時設置文本,當按下按鈕並且filechooser返回選定的文件。問題是TextField在選擇文件時沒有更新。JTextField setText不起作用

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           
    jFileChooser1=new JFileChooser(); 
    jTextField1=new JTextField(); 
    jFileChooser1.showOpenDialog(myJFrame.this); 
    File f=jFileChooser1.getSelectedFile(); 
    String filePath=f.getAbsolutePath(); 
    System.out.println(filePath); 
    jTextField1.setText((filePath)); 
    jTextField1.setVisible(true); 
    System.out.println(jTextField1.getText()); 

} 

調試日誌返回正確的值,即文件路徑名。謝謝。

+0

它到達println語句嗎? –

+1

另外,您不會將textField添加到任何內容,所以它不會顯示出來。 –

+2

不要在此方法內實例化'jTextField1',僅將其實例化爲一次,例如在聲明時間'JTextField jTextField1 = new JTextField();'。 – Berger

回答

0

您需要最後撥打setVisible。另外,如果該字段已經創建並可見,請嘗試撥打.repaint().validate()

+0

正如你所看到的,我在日誌之前的最後一條指令是setVisible。重繪()不工作 –

+0

我編輯我的答案,也嘗試'.validate()' - 你可以發佈更多的代碼? – Eskir

2

actionPerformed在事件循環中處理。推遲文本操作。

此外可能存在創建的JTextField,它被添加到窗口中。 在這裏創建一個新的,而不添加任何地方。

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 
    EventQueue.invokeLater(new Runnable() { 

     @Override 
     public void run() {   
      JFileChooser fileChooser = new JFileChooser(); 
      //jTextField1 = new JTextField(); 
      if (fileChooser.showOpenDialog(myJFrame.this) == JFileChooser.APPROVE_OPTION) { 
       File f = fileChooser.getSelectedFile(); 
       String filePath = f.getAbsolutePath(); 
       jTextField1.setText((filePath)); 
       //jTextField1.setVisible(true); 
      } 
     }   
    }); 
} 

的Java 8:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 
    EventQueue.invokeLater(() -> { 
      JFileChooser fileChooser = new JFileChooser(); 
      //jTextField1 = new JTextField(); 
      if (fileChooser.showOpenDialog(myJFrame.this) == JFileChooser.APPROVE_OPTION) { 
       File f = fileChooser.getSelectedFile(); 
       String filePath = f.getAbsolutePath(); 
       jTextField1.setText((filePath)); 
       //jTextField1.setVisible(true); 
      } 
    }); 
} 
0

聲明並在您的默認構造函數或作爲一個全局變量,實例化jTextField1。例如:

public class Main { 

    JTextField jTextField1 = new JTextField();//declaring as global varible 
    public Main(){ 
     //jTextField1 = new JTextField();//can be instantiated here if it is already declared as global variable 
    } 

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 
     jFileChooser1 = new JFileChooser(); 
     jFileChooser1.showOpenDialog(myJFrame.this); 
     File f = jFileChooser1.getSelectedFile(); 
     String filePath = f.getAbsolutePath(); 
     System.out.println(filePath); 
     jTextField1.setText((filePath)); 
     jTextField1.setVisible(true); 
     System.out.println(jTextField1.getText()); 

    } 
    //other methods and code goes here. 
}