私のアプリケーションのテキストフィールドに汎用の右クリックを追加しようとしています。私は、私のフレームの上にガラスの枠を追加し、それを見えなくし、普遍的なマウスのリスナーとして登録することができる解決策を見つけました。コンポーネントがテキストフィールドの場合は、ポップアップメニューを表示します。それ以外の場合は、イベントを再ディスパッチします。私は以下のコードを貼り付けました...フレームにglasspaneを追加すると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)
でstackoverflowのエラーを取得します。しかし、なぜ再帰呼び出しに変換されているのですか?
EDIT: はちょうど私が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/)を投稿してください。問題を表示していないコードに基づいて**削除された投稿が**あります。さらに同じ混乱を避けるため、同じコードが編集されました。 –
Andrewに感謝します。 SSCCEが間違っているのは残念です。私は自分のコードベースに投稿したのと同じクラスを使用しました。私はそれを抜き出し、正しく動作しているのを見ました。自分のコードベースと統合したときになぜ失敗したのか分かりませんでした。私が持っていたすべての情報を載せると思った。 – sethu
あなたはそれを整理してうれしいです。ダウンボートの逆転 - ソリューションの報告。 –