JavaFX 2 ComboBox setValue()不会设置CB文本 - java

我的问题是,使用setValue()选择它后,所选的ComboBox项目文本在屏幕上不可见。
以下是一些详细信息:
向我的认证机构添加项目:

combo.getItems().add("a");
combo.getItems().add("b");
combo.getItems().add("c");
combo.getItems().add("d");

之后,当按下按钮A时:

combo.setValue(null);

按下按钮B时:

combo.setValue("a");

现在,如果我先按按钮B,则显示“a”,那就可以了。
之后,如果我按下按钮A,则ComboBox上没有显示任何文本,那就可以了。
然后,我按B键,并且该值在屏幕上没有更改。但是,如果单击CB,则“a”的行将突出显示,并且combo.getValue()返回“a”。

有什么建议如何处理吗?

参考方案

我也有同样的问题。看起来像个错误。这是一个完整的工作示例,其中包含一个ComboBoxLocale:

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,并设置了第二个Locale

第二次填充后,ComboxBox.setValue不起作用:ComboBox包含所有3个Locale,但未设置第二个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()));

选择项目并设置提示。但我不知道这是否存在athor问题(工具提示或类似内容)

JavaFX FXML无效类型 - java

我正在Linux中用Eclipse编写JavaFX应用程序,并使用SceneBuilder编写了某些FXML代码。当我移至Windows时,如果我尝试执行代码,它将运行良好,但是,如果我尝试修改fxml文件,它将开始给我一个错误(与修改无关)。我也尝试使用NetBeans,但没有任何改变。错误是:javafx.fxml.LoadException: Ligh…

JavaFX DatePicker设置日期值的对齐方式 - java

当我使用JavaFX的Datepicker并使用节点的整个宽度时,日期选择器的文本不会居中。我尝试使用setStyle("-fx-alignment: center;"),但这不起作用。我想要这样的东西(用油漆做):如何将文字居中?这是示例代码:import java.time.LocalDate; import javafx.appli…

JavaFX WebView URL.createObjectURL未定义 - java

我正在使用JavaFX 8嵌入式WebView。我想从Blob图片构建Blob URL。但是,URL.createObjectURL给了我未定义的信息。在JavaFX 8 WebView环境中,是否有任何方法(匀场等)从Blob对象创建Blob URL? 参考方案 看来目前尚不支持它,但是Java 9将于9月发布。https://bugs.openjdk.j…

JavaFX FXMLLoader:从jar文件加载时未设置位置 - java

我有一个问题,当我将项目导出到jar文件时,会出现错误:java.lang.IllegalStateException: Location is not set. 这是由于我试图做出如下所示的视图而引起的:public View(Stage stage) throws IOException { loader = new FXMLLoader(getClas…

Java FX 2 CSS伪类 - java

如何在Java FX 2中创建自己的CSS伪类?这样在CSS文件中我可以使用这种样式.MyButton : online{ } 在FX 1中,可以使用诸如 public long impl_getPseudoClassState() {} 但现在不推荐使用它们:-(有没有新的方法? 参考方案 目前您无法做到。这是JavaFX CSS Reference Gu…