私も同じ問題を抱えてる。バグのようです。sComboBox
を含むa を使用した完全な動作例を次に示します。Locale
package org.example;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;
import javafx.util.StringConverter;
public final class ComboBoxTest extends Application {
@Override
public void start(final Stage stage) throws Exception {
// Initialize UI
stage.setTitle("ComboBox Test");
final HBox root = new HBox(5.0f);
final ComboBox<Locale> cbLocales = new ComboBox<>();
cbLocales.setConverter(new StringConverter<Locale>() {
@Override
public String toString(final Locale locale) {
return locale.getDisplayName();
}
@Override
public Locale fromString(String string) {
throw new UnsupportedOperationException();
}
});
cbLocales.setPrefWidth(250);
HBox.setMargin(cbLocales, new Insets(10));
root.getChildren().add(cbLocales);
final Button btnFill = new Button("Fill");
HBox.setMargin(btnFill, new Insets(10));
root.getChildren().add(btnFill);
final Scene scene = new Scene(root);
stage.setScene(scene);
btnFill.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(final MouseEvent event) {
// Fill with content
final List<Locale> locales = Arrays.asList(Locale.ENGLISH,
Locale.GERMAN, Locale.FRENCH);
final Locale defaultLocale = locales.get(1);
// cbLocales.getItems.setAll(locales) doesn't work
cbLocales.getItems().clear();
cbLocales.getItems().addAll(locales);
// Set default locale
cbLocales.setValue(defaultLocale);
cbLocales.setPromptText(cbLocales.getConverter().toString(
cbLocales.getValue()));
}
});
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
がComboBox
初めて満たされると、すべて正常に動作します。ComboBox
には 3 つすべてが含まれLocale
、2 番目の sLocale
が設定されます。
2 回目の入力後、ComboxBox.setValue
機能しません:ComboBox
には 3 つすべてが含まれていますLocale
が、2 番目Locale
は設定されていません。アイテムが選択されておらず、プロンプトが表示されていません。
プロンプトの問題を修正しました
// Set default locale
cbLocales.setValue(defaultLocale);
cbLocales.setPromptText(cbLocales.getConverter().toString(
cbLocales.getValue()));
ただし、リスト内のアイテムは選択されません。
回避策は次のとおりです。
cbLocales.getSelectionModel().select(defaultLocale);
cbLocales.setPromptText(cbLocales.getConverter().toString(cbLocales.getValue()));
項目を選択してプロンプトを設定します。しかし、それに関する別の問題があるかどうかはわかりません (ツールのヒントなど)。