2016-05-17 7 views
0

У меня есть объект javafx.scene.control.ChoiceDialog в моем проекте JavaFX. Когда откроется диалоговое окно, я хочу установить фокус на базовый ComboBox. Однако я не могу понять, как получить базовый элемент управления ComboBox. С помощью TextInputDialog существует метод, называемый getEditor(). Есть ли какой-либо способ (кроме рефлексивного доступа к частному члену comboBox), чтобы получить базовый ComboBox?JavaFX Получить ComboBox от ChoiceDialog

+0

AFAIK, то ComboBox получает фокус по умолчанию, когда ChoiceDialog видна. – ItachiUchiha

+0

В Windows 7 Enterprise SP1 x64, работающем на JRE 8u77 x64, я вижу первоначальный фокус на кнопке по умолчанию (которая является кнопкой «ОК»). Я вижу такое же поведение для 'TextInputDialog'. Вы наблюдали различное поведение в другой комбинации ОС/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), который стажер устанавливает [фокус на ComboBox] (http://hg.openjdk.java.net/openjfx/8u/rt/file/105417e52ffe/modules/controls/src/ Основной/Java/JavaFX/сцены/контроль/ChoiceDialog.java # L220). – ItachiUchiha

ответ

1

Чтобы установить фокус на ComboBox вы можете использовать грязный хак, который вызывает updateGrid в ChoiceDialog после того, как показано на рисунке:

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'. Вы можете получить класс 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, также посмотрите на 'modena.css', который находится внутри' jfxrt.jar' в вашей JRE каталог. Стиль стилей modena определяет стиль по умолчанию для всех элементов управления. Если вы настраиваете стиль существующих элементов управления, выполняете поиск по CSS на основе их структуры или просто хотите изучить лучшие практики для определений CSS JavaFX, modena.css - бесценный ресурс. – jewelsea