JTextField setText不起作用

时间:2016-09-19 09:12:33

标签: java swing

我有一个JTextField,当按下按钮并且filechooser返回所选文件时,我想在运行时setText。问题是选择文件时TextField没有更新。

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());

}

调试日志返回正确的值,即文件路径名。谢谢。

3 个答案:

答案 0 :(得分: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);
            }
    });
}

答案 1 :(得分:0)

您最后需要致电setVisible。此外,如果该字段已创建且可见,请尝试在其上调用.repaint().validate()

答案 2 :(得分: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.
}