在 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时出错[重复]
如果在另一个 Combobox 中选择,则隐藏特定的 Combobox 项