今天在我的 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/