java - 在 Swing 中右键单击焦点

标签 java swing

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

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

在 mouseRelease 上执行此操作。

最佳答案

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

创建 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() 据说依赖于平台,不应再使用。

关于java - 在 Swing 中右键单击焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35513767/

相关文章:

java - 将 JTable 添加到 JScrollPane

java - Swing - setResizable(true) 使 JFrame 标题栏更高,窗口尺寸更小

java - 我怎样才能改进这段代码,这样就不会因为有多个同名对象而出现错误?

java - 加载本地文件时android webview不执行javascripts

java - JTextArea 强制父级 JScrollPane 向下滚动

java - 为什么这不会绘制图像?

java - 从 mysql 数据库检索数据到文本字段

java - 如何从 sparql 结果中提取 dataproperty 值?

java - Spark : . saveAsTextFile 丢失 Java 对象的继承字段

java - 是否有 Java 代码约定的更新版本