gpt4 book ai didi

java - 将玻璃板添加到框架时出现计算器溢出错误

转载 作者:行者123 更新时间:2023-12-04 06:03:52 25 4
gpt4 key购买 nike

我正在尝试向我的应用程序中的文本字段添加通用右键单击。我遇到了一个解决方案,我可以在我的框架顶部添加一个玻璃 Pane ,使其不可见并将其注册为通用鼠标监听器。如果组件是一个文本字段,我会显示弹出菜单,否则我会重新调度事件。我已经粘贴了下面的代码...

这个例子工作正常。但是当我在我的应用程序中使用它时,我在

Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
at apple.awt.CWindow._getLocationOnScreen(Native Method)
at apple.awt.CWindow.getLocationOnScreen(CWindow.java:878)
at java.awt.Component.getLocationOnScreen_NoTreeLock(Component.java:1960)
at java.awt.Component.getLocationOnScreen(Component.java:1938)
at javax.swing.SwingUtilities.convertPointToScreen(SwingUtilities.java:364)
at javax.swing.SwingUtilities.convertPoint(SwingUtilities.java:165)
at com.aesthete.csmart.ui.common.components.RightClickGlassPane.redispatchMouseEvent(RightClickGlassPane.java:79)
at com.aesthete.csmart.ui.common.components.RightClickGlassPane.mouseEntered(RightClickGlassPane.java:61)

我知道每次在组件上输入鼠标时,玻璃 Pane 都会接收事件然后重新调度。但是为什么它会被转换成递归调用呢?

编辑:
只是想向大家展示我如何用 Camickr 建议解决它:
SwingUtilities.invokeLater(new Runnable() {
public void run() {
final JPopupMenu popup = new JPopupMenu();
JMenuItem mnItemCopy = new JMenuItem("Copy", CommonUI.getScaledImage(13, 13, "/images/copy.png"));
JMenuItem mnItemCut = new JMenuItem("Cut", CommonUI.getScaledImage(13, 13, "/images/cut.png"));
JMenuItem mnItemPaste = new JMenuItem("Paste", CommonUI.getScaledImage(13, 13, "/images/paste.png"));
popup.add(mnItemCopy);
popup.add(mnItemCut);
popup.add(mnItemPaste);

Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() {
@Override
public void eventDispatched(AWTEvent event) {
if(event instanceof MouseEvent) {
MouseEvent mouseevent=(MouseEvent)event;
if(mouseevent.isPopupTrigger()) {
if (mouseevent.getComponent() instanceof JTextField) {
popup.show(mouseevent.getComponent(), mouseevent.getX(), mouseevent.getY());
}
}
}
}
}, AWTEvent.MOUSE_EVENT_MASK);
}
});

最佳答案

I am trying to add a universal right click to textfields in my application.



退房 Global Event LIsteners .只需检查事件的来源并根据需要进行处理。无需重新调度事件。

请注意,您不应假设右键单击是显示弹出窗口的 LAF 方式。阅读 Bringing Up a Popup Menu 上的 Swing 教程中的部分以获得更好的解决方案。

关于java - 将玻璃板添加到框架时出现计算器溢出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8611643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com