1

我想在用户单击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.
    }

 }

(代码在这里。)

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

我该如何解决这个问题?您的建议将不胜感激!

4

1 回答 1

2

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

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

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

于 2012-07-22T06:55:36.843 回答