【问题标题】:Want jTextField to lose focus when I click on the main window当我单击主窗口时,希望 jTextField 失去焦点
【发布时间】:2011-05-14 05:38:30
【问题描述】:

我已经为此苦苦挣扎太久了。当我在 jTextField 中输入完毕后,我希望它在单击文本字段外的窗口时失去焦点。我不知道该怎么做。我能做的最好的是将焦点转移到下一个文本字段。

【问题讨论】:

    标签: java swing


    【解决方案1】:

    考虑你的类扩展了 JFrame:

    JTextField jTextField1 = new JTextField();
    
    addMouseListener(new java.awt.event.MouseAdapter() {
                public void mouseClicked(java.awt.event.MouseEvent evt) {
                    jTextField1.setFocusable(false);
                }
            });
    

    希望对您有所帮助...

    【讨论】:

      【解决方案2】:

      你为什么想失去焦点?我确信有更好的设计,然后强制用户单击窗口以导致文本字段失去焦点。

      无论如何,当另一个组件获得焦点时,文本字段将失去焦点。默认情况下,面板是不可聚焦的,因此单击它不会导致文本字段失去焦点。使面板具有焦点:

      panel.setFocusable( true );
      

      当然,现在当用户使用 tab 键时,面板现在将包含在 tab 顺序中。这也是这个设计看起来很糟糕的另一个原因。

      【讨论】:

      • 我无法弄清楚如何在 netbeans 中执行此操作。我检查了可聚焦的属性,但它似乎没有做任何事情。创建面板后,我可以尝试插入代码。我想在编辑后将焦点从文本字段 b/c 中移开,我希望能够使用我的键盘快捷键“p”来激活按钮。我想当其他任何东西失去焦点时,我可以给按钮焦点。
      • 抱歉,setFocusable() 仅在从一个组件切换到另一个组件时才有效。如果您使用鼠标,则需要将 MouseListener 添加到面板,然后使用 requestFocusInWindow() 方法将焦点赋予面板。现在您开始了解为什么“Alt-P”是调用框架上的按钮的标准方法。您不会强迫用户采取让文本字段失去焦点的额外步骤。像 MS 这样的公司已经花费大量资金来开发可行的 GUI。任何时候你离开正常的设计,你都会有一个复杂的用户界面,用户需要学习。保持简单。
      猜你喜欢
      • 2011-03-07
      • 2021-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-24
      相关资源
      最近更新 更多