【问题标题】:Right click focus in Swing在 Swing 中右键单击焦点
【发布时间】:2016-02-19 19:50:25
【问题描述】:

今天在我的 Swing 应用程序中,当我左键单击时,文本区域获得焦点。当我右键单击任何其他文本字段时,会出现弹出菜单,但该文本区域没有聚焦。焦点仍停留在之前左键单击的字段上。如何从上一个字段中移除焦点并使其显示在右键单击的字段上?

if (e.isPopupTrigger()) {
        ContextMenu menu = new ContextMenu();
        menu.show(tree, e.getX(), e.getY());
    }

在 mouseRelease 上执行此操作。

【问题讨论】:

  • 当您单击左键时,不会突出显示任何文本。插入符号移动到您单击的位置。
  • 所以我必须将插入符号重新定位到接下来执行右键单击的文本字段?
  • when I left click, the text area gets highlighted. 我不明白你的问题,因为你在上面做了一个无效的陈述。左键单击时文本不会突出显示,因此您必须有一些自定义代码来执行此操作。因此,如果您希望在右键单击时发生同样的事情,那么您需要复制该自定义代码。
  • 我猜你只想右键单击将焦点转移到单击的组件。为此使用requestFocusInWindow()。此外,如果您希望您的代码在所有平台上工作,您需要在 mousePressed 和 mouseClicked 中执行相同的代码,而不仅仅是 mouseReleased。
  • 这似乎没有帮助:(我不确定我是否清楚我的要求。在 Windows 机器文件资源管理器中,当我们右键单击一个文件时,该字段被突出显示,我也希望在我的 Swing 应用程序中也有类似的行为。弹出窗口显示,但我单击的文本字段没有突出显示。左键单击工作正常。我是 Swing 新手,所以如果我是什么,我很抱歉说的没有道理。

标签: java swing


【解决方案1】:

假设您的意思是“焦点”而不是“突出显示”:

创建 JTextField 的子类,添加鼠标侦听器,并在按下、释放或单击鼠标按钮时强制文本字段请求焦点(三个版本以确保它适用于每个平台)。

import javax.swing.JTextField;

public class TextFieldRClick extends JTextField {

    public TextFieldRClick() {
        super();
        createMouseListener();
    }

    public TextFieldRClick(int cols) {
        super(cols);
        createMouseListener();
    }

    private void createMouseListener() {
        this.addMouseListener(new java.awt.event.MouseAdapter() {
            @Override
            public void mousePressed(java.awt.event.MouseEvent evt) {
                requestFocusInWindow();
            }

            @Override
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                requestFocusInWindow();
            }

            @Override
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                requestFocusInWindow();
            }
        });
    }
}

然后,您可以直接将文本字段创建为“new TextFieldRClick()”,使它们能够在用户右键单击它们时获得焦点。

我遇到了同样的问题,这解决了我。

编辑:将 requestFocus() 更改为 requestFocusInWindow()。 requestFocus() 据说是平台相关的,不应再使用。

【讨论】:

    猜你喜欢
    • 2010-12-11
    • 1970-01-01
    • 1970-01-01
    • 2012-05-30
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    相关资源
    最近更新 更多