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

时间:2012-07-22 06:46:55

标签: 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上。当用户点击“取消”按钮时,会发生同样的事情。

如何解决此问题?非常感谢您的建议!

1 个答案:

答案 0 :(得分:2)

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

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

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