gpt4 book ai didi

java - 在 JavaFX 中管理 ComboBox 项

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:25:41 24 4
gpt4 key购买 nike

我正在使用 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);
}

Controller :

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());
}

}

测试.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>

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

enter image description here

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

enter image description here

我仍然可以选择这些项目,但它们不在那里可以看到。这是一个错误吗?如果是,是否有解决方法?

已编辑以提供 MCVE

最佳答案

您不应该将 Text 节点放入 ComboBox 中……请查看这个对您有帮助的问题:setButtonCell for ComboBox

关于java - 在 JavaFX 中管理 ComboBox 项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21160750/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com