繁体   English   中英

JTextField setText不起作用

[英]JTextField setText doesn't work

我有一个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());

}

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

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

您需要最后调用setVisible 另外,如果已经创建现场可见,尝试调用.repaint().validate()就可以了。

在默认构造函数中或作为全局变量声明和实例化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.
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM