在 JavaFX 中管理 ComboBox 项

Posted

技术标签:

【中文标题】在 JavaFX 中管理 ComboBox 项【英文标题】:Managing a ComboBox items in JavaFX 【发布时间】:2014-02-05 07:10:33 【问题描述】:

我正在使用 Text 对象填充 ComboBox。使用 Text 对象而不是 Strings 允许我添加一个可以在我的程序中使用的 id 值,然后在我决定国际化 UI 时加以利用。无论如何,这就是我正在做的事情: 主类:

public class MainApp extends Application 

private Stage primaryStage;

@Override
public void start(Stage primaryStage) 
    this.primaryStage = primaryStage;
    try 
        AnchorPane paneMain = (AnchorPane) FXMLLoader.load(getClass().getResource("Test.fxml"));
        Scene scene = new Scene(paneMain);
        primaryStage.setScene(scene);
        primaryStage.show();
     catch (IOException e) 
        e.printStackTrace();
    

public static void main(String[] args) 
    launch(args);

控制器:

public class Test implements Initializable

@FXML
private AnchorPane anchorPane;
@FXML
private ComboBox<Text> comboTime; 
private Text days;
private Text hours;
private Text minutes;
private int timeMultiplier; 

public Test()
    days = new Text("Days");
    days.setId("86400000");
    hours = new Text("Hours");
    hours.setId("3600000");
    minutes = new Text("Minutes");
    minutes.setId("3600000");
    timeMultiplier = 0;


@Override
public void initialize(URL location, ResourceBundle resources) 
    comboTime.getItems().removeAll(comboTime.getItems());
    comboTime.getItems().addAll(days, hours, minutes);
    comboTime.getSelectionModel().select(hours);



@FXML
private void setTimeMultiplier()
    Text text = comboTime.getSelectionModel().getSelectedItem();
    timeMultiplier = Integer.valueOf(text.getId());



Test.fxml:

<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.collections.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.paint.*?>
<?import javafx.scene.text.*?>

<AnchorPane id="AnchorPane" fx:id="anchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="100.99990000000253" prefWidth="94.99990000000253" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="com.spacitron.backupp.ui.controllers.Test">
  <children>
    <HBox id="HBox" alignment="CENTER" layoutX="41.0" layoutY="224.0" prefWidth="216.0" spacing="5.0" />
    <ComboBox id="comboInterval" fx:id="comboTime" editable="false" layoutX="14.0" layoutY="22.0" onAction="#setTimeMultiplier">
      <items>
        <FXCollections fx:factory="observableArrayList">
          <String fx:value="Item 1" />
          <String fx:value="Item 2" />
          <String fx:value="Item 3" />
        </FXCollections>
      </items>
    </ComboBox>
  </children>
</AnchorPane>

现在,这工作得很好。然而问题是,当我选择一个项目时,该项目上的文本会变成空白,如下所示:

如果我选择另一个,它也会消失:

我仍然可以选择项目,但它们只是不可见。这是一个错误吗?如果是,有办法解决吗?

已编辑以提供 MCVE

【问题讨论】:

如果您发布 MCVE ***.com/help/mcve,人们可以在他们的机器上为您试用。 我查看了 ComboBox 的文档(仅在 JavaFx2.1+ 中添加,因此我无法测试您的代码(抱歉)。但它在开始时有一个警告您不应该直接添加实例节点,而应该使用单元工厂来创建您的实例:docs.oracle.com/javafx/2/api/javafx/scene/control/ComboBox.html 我不确定这对您是否有用,但试一试看看。跨度> 【参考方案1】:

您不应该将 Text 节点放入 ComboBox ...请参阅这个对您有帮助的问题:setButtonCell for ComboBox

【讨论】:

以上是关于在 JavaFX 中管理 ComboBox 项的主要内容,如果未能解决你的问题,请参考以下文章

将项添加到comboBox javaFx FXML时出错[重复]

JavaFX 自动完成组合框下拉大小

带有复选框的 JavaFX 组合框

如果在另一个 Combobox 中选择,则隐藏特定的 Combobox 项

如何修复 javafx 中的渲染错误(ComboBox、ListView)

如何在 JavaFx 的可编辑 ComboBox 中获取输入值?