내 응용 프로그램의 텍스트 필드에 보편적 인 오른쪽 클릭을 추가하려고합니다. 나는 내 프레임 위에 유리창을 추가하고 보이지 않게 만들고 보편적 인 마우스 리스너로 등록 할 수있는 솔루션을 발견했습니다. 구성 요소가 텍스트 필드 인 경우 팝업 메뉴를 표시하고, 그렇지 않으면 이벤트를 재발송합니다. 아래 코드를 붙여 넣었습니다 ...내 프레임에 유리판을 추가 할 때 stackoverflow 오류가 발생합니다.
이 예제는 잘 동작합니다. 그래도 난 내 응용 프로그램이 사용할 때, 나는 마우스가 다음 유리 창 이벤트를받는 구성 요소에 입력하고 때마다 재발송 이해
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)
에서 유래 오류가 발생합니다. 하지만 재귀 호출로 변환되는 이유는 무엇입니까?
편집 : 나는 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);
}
});
더 나은 도움을 받으려면 [SSCCE] (http://sscce.org/)를 게시하십시오. 문제가 표시되지 않은 코드를 기반으로 ** 삭제 된 게시물이 ** ** 있습니다! 혼란을 피하기 위해 같은 코드가 편집되었습니다. –
감사합니다 앤드류. 잘못된 SSCCE에 대해 죄송합니다. 내 코드베이스에 게시 한 것과 동일한 클래스를 사용했습니다. 나는 그것을 추출하여 올바르게 실행되고있는 것을 보았습니다. 내 코드 기반과 통합되었을 때 왜 실패했는지 확신 할 수 없었다. 내가 가진 모든 정보를 다 줄께. – sethu
다행 이군. 반대표를 반전하여 해결책을보고했습니다. –