JFrameにJTextPaneがあり、JTextPane.setComponentPopupMenuメソッドを介してJTextPaneに割り当てられるポップアップメニューがあります。
JTextPaneに「単語のような」ポップアップ動作を与えたいと思います。つまり、現在のテキスト選択の外側を右クリックすると、カレットは右クリックした場所に再配置され、テキスト選択に影響するメニューオプション(切り取り、コピー、太字など)が無効になります。現在のテキスト選択内で右クリックすると、テキスト選択を有効にするオプションを含むポップアップが表示され、テキスト選択が保持され、カレットは移動しません。
問題は、選択の変更を処理するコードをどこに配置できるかがわからないように見えることです。私は試した:
- ポップアップが表示される前にトリガーされる「PopupMenuWillBecomeVisible」イベントを使用します。このメソッドに渡されるイベントにはマウスイベント情報が含まれていないため、viewtomodelを使用して選択を変更する方法を見つける方法はありません。私はMouseInfoを使用できましたが、それはせいぜい疑わしいようです。
- JTextPaneまたはJFrameでMousePressed/MouseReleasedイベントを使用する。どうやら、ポップアップメニューがトリガーされたときにこれらのイベントのどちらも呼び出されません。実際、ポップアップメニューの親コンポーネントが何であるかはまだわかりません。(Windowsでは「MouseReleased」がポップアップトリガーであり、他のシステムでは「MousePressed」がトリガーであることを読みました。両方を試しましたが、どちらも機能しませんでした)。
したがって、問題は、ポップアップメニューが表示される前に呼び出されるコードを配置する場所が見つからないように見えることですが、ポップアップメニューをトリガーしたmouseEventを認識していることだと思います。私はここで何かが欠けているに違いありません。