すでに述べたように、呼び出しGetContextMenu()
は null を返します (これは、デフォルトのものは実装の詳細であるという大きな手がかりです)。さらに追加するContextMenu
と、デフォルトのものの上に表示されます。
コンテキスト メニューを次のコードに置き換えようとしています。
ContextMenu cm = new ContextMenu();
cm.getItems().add(new MenuItem("Test"));
textbox.setContextMenu(cm);
次の結果が生成されます。
マウス クリック イベントのオーバーライドも機能しません。これは、不可能と思われるプロパティを介してデフォルトのコンテキスト メニューにアクセスする必要があるためです。
また、CSS リファレンスをチェックしてContextMenu
、コントロールのサブ構造の 1 つを介してターゲット可能かどうかを確認しましたが、これも結果が返されませんでした。
この情報に基づいて、デフォルトContextMenu
はTextField
コントロールの実装の詳細 (または親クラスTextInputControl
) であり、現在変更できないように見えます。
アップデート
私は、Jonathan Giles (Oracle の JavaFX UI コントロール チームのテクニカル リード) に連絡し、バグ レポートを提出するように言われました。
バグ データベースを検索したところ、いくつかの既存のレポート (RT-23213 & RT-24823) が見つかったため、これは既知の問題のようです。今日現在、この問題は未解決であり、中程度の優先度と見なされていますが、FX 8.0 で修正される予定です。
バグレポートのコメントから:
デフォルトのコンテキスト メニューは、現在パブリック API ではないコントロールのスキンによって作成されます。パブリック API を介してコンテキスト メニューにアクセスできるようにするかどうか、いつアクセスできるようにするかを決定する必要がありますが、スキンをより公開するためのより広範な作業を待つ必要があるでしょう。