2016-09-19 154 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. 
}