我有一个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());
}
调试日志返回正确的值,即文件路径名。谢谢。
答案 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.
}