java - 当用户单击 JTextField 时如何显示“打开文件”对话框?

标签 java swing jtextfield mouse-listeners focuslistener

我想在用户单击 JTextField 时显示“打开文件”对话框。当我添加以下代码时(我现在将其删除)...

 this.textField.addFocusListener(new FocusListener() {

    public void focusGained(FocusEvent event) {
      // Show the Open File dialog box.
      // Same as lines 86-93 in the link below.
    }

    public void focusLost(FocusEvent event) {
      // Do nothing.
    }

 }

(代码 here 。)

...似乎在用户选择一个文件然后单击“确定”按钮后,“打开文件”对话框将再次出现,因为我假设焦点仍然在 JTextField 上。当用户单击“取消”按钮时,也会发生同样的情况。

如何解决这个问题?我们将非常感谢您的建议!

最佳答案

问题是当文件选择器对话框出现时,它会获得焦点。当它关闭时(我假设),您重新聚焦文本字段(或者焦点管理器将焦点返回到它),这会再次触发焦点事件。

我可以想到两种解决方案。一,如果您只想在用户“单击”该字段时显示文件对话框,请改用鼠标监听器。

二,使用内部标志来监视当前的操作状态。考虑到事件处理的性质,这可能更难以实现

关于java - 当用户单击 JTextField 时如何显示“打开文件”对话框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11598266/

相关文章:

java - 获取表大小时如何排除表的第一行和最后一行

java - static public 和public static,为什么同样的事情可以做两种不同的风格呢?

Java CardLayout .show() 不显示

java - 按下 JFrame 中的按钮后打开 JPanel

java - 如何设置向 JTextField 显示结果时间的计时器?

java - 设置 JTextField 的对齐方式

java - Spring Roo 的“无法解析为类型”错误

java - 读取 Jira Webhook POST 数据

java - 创建对话框时出现不兼容类型错误

java - 如何在java中将两个文本字段放置为一个视口(viewport)?