2016-05-17 8 views
0

私はJavaFXプロジェクトにjavafx.scene.control.ChoiceDialogオブジェクトを持っています。ダイアログが開いたら、フォーカスを基礎となるComboBoxに設定します。しかし、私は基本的なコントロールを取得する方法を理解することはできませんComboBoxTextInputDialogの場合、getEditor()というメソッドがあります。 (プライベートcomboBoxのメンバーに反射的にアクセスする以外の方法はありますか)基礎を得るにはComboBox?フォーカスを設定するにはJavaFX ChoiceDialogからComboBoxを取得

+0

私の知る限りをChoiceDialogが表示されているときに、コンボボックスは、デフォルトでフォーカスを受け取ります。 – ItachiUchiha

+0

Windows 7 Enterprise SP1 x64では、JRE 8u77 x64を実行しているので、デフォルトボタン(「OK」ボタンになることがあります)に焦点を当てています。私は 'TextInputDialog'と同じ動作をします。別のOS/JVMの組み合わせで異なる動作を観察しましたか? –

+0

私はそれが可能ではないと思います。 ChoiceDialogのコードをチェックすると、[コンストラクタはupdateGrid()を呼び出します(http://hg.openjdk.java.net/openjfx/8u/rt/file/105417e52ffe/modules/controls/src/main/java/javafx /scene/control/ChoiceDialog.java#l151)インターンは、[Focus on the ComboBox](http://hg.openjdk.java.net/openjfx/8u/rt/file/105417e52ffe/modules/controls/src/)を設定します。 main/java/javafx/scene/control/ChoiceDialog.java#l220)。 – ItachiUchiha

答えて

1

ComboBoxあなたはそれが示された後ChoiceDialogupdateGridをトリガー汚いハック、使用することができますに:

ChoiceDialog<String> choiceDialog = new ChoiceDialog<>("test", getData()); 
choiceDialog.showingProperty().addListener((ov, b, b1) -> { 
    if (b1) { 
     choiceDialog.setContentText(""); 
    }else { 
     choiceDialog.setContentText(null); 
    } 

    //or 
    if (b1) { 
     Node comboBox = choiceDialog.getDialogPane().lookup(".combo-box"); 
     comboBox.requestFocus(); 
    } 
}); 
+0

".combo-box"定数はどのようにして分かりましたか?私は将来知っているので、私はそれを自分自身で見ることができます。 –

+1

これは 'ComboBox'のデフォルトのスタイルクラスです。 'Node'のStyleクラスは[CSSリファレンスガイド](http://docs.oracle.com/javafx/2/api/javafx/scene/doc-files/cssref.html)から入手できます。 [Scenicview](http://fxexperience.com/scenic-view/)を使用して、 'Scenegraph ' – jns

+0

Jeffのプロパティを調べ、JREの' jfxrt.jar'の中にある 'modena.css'も見てくださいディレクトリ。 modenaスタイルシートは、すべてのコントロールのデフォルトのスタイルを定義します。既存のコントロールのスタイリングをカスタマイズしたり、構造に基づいてCSSルックアップを行ったり、JavaFX CSS定義のベストプラクティスを習得したい場合は、modena.cssは非常に貴重なリソースです。 – jewelsea

関連する問題