java - 从 swing jCombobox 迁移到 javaFX ComboBox

标签 java swing javafx combobox

我有一个旧的 swing Jcombobox,我曾经这样使用过。

baudRatecomboBox = new JComboBox(baudRates);
    baudRatecomboBox.setSelectedIndex(1);
    GridBagConstraints gbc_baudRateComboBox = new GridBagConstraints();
    gbc_baudRateComboBox.fill = GridBagConstraints.HORIZONTAL;
    gbc_baudRateComboBox.insets = new Insets(0, 0, 5, 5);
    gbc_baudRateComboBox.gridx = 1;
    gbc_baudRateComboBox.gridy = 3;
    getContentPane().add(baudRatecomboBox, gbc_baudRateComboBox);
String[] baudRates = { "2400", "4800", "9600", "14400", "19200", "38400", "56000", "115200"  };

我正在使用 JavaFX 重写我的应用程序,但无法填充组合框。

这是我的 FXML

<ComboBox id="baudRatecomboBox" fx:id="baudRateComboBox" prefHeight="30.0" prefWidth="87.0" promptText="Baud" />

这是我的 Java

@FXML
ComboBox baudRateComboBox;

public void start(Stage primaryStage) {
    try {
        Parent root = FXMLLoader.load(getClass().getResource("LaserControllerUI.fxml"));
        Scene scene = new Scene(root);
        primaryStage.setTitle("Laser Controller");
        primaryStage.setScene(scene);
        primaryStage.show();
        scene.getStylesheets().add
         (LaserControllerUI.class.getResource("LaserControllerUI.css").toExternalForm());
        ComboBox<String> baudRateComboBox = new ComboBox();
        baudRateComboBox.getItems().addAll(baudRates);       
        baudRateComboBox.setVisible(true);

为什么我的组合框没有填充?

最佳答案

您只是没有将费率添加到屏幕上显示的 ComboBox 中。

由于您似乎让 FXMLLoader 创建 Controller 实例,因此您也不会将 ComboBox 注入(inject)到 Application 对象中属于start方法。

顺便说一句:在大多数情况下,使用 Application 类作为 Controller 并不是一个好主意。

如果ComboBox中的项目集始终相同,则可以使用 Controller 的initialize方法来设置项目。此外,指定类型参数始终是一个好主意。

@FXML
private ComboBox<String> baudRateComboBox;

@FXML
private void initialize() {
    // called by FXMLLoader after injecting fields
    baudRateComboBox.getItems().addAll(baudRates);
}
<小时/>

您还可以直接在 fxml 文件中指定项目:

<ComboBox id="baudRatecomboBox" fx:id="baudRateComboBox" prefHeight="30.0" prefWidth="87.0" promptText="Baud">
    <items>
        <FXCollections fx:factory="observableArrayList">
            <String fx:value="2400"/> 
            <String fx:value="4800"/> 
            <String fx:value="9600"/> 
            <String fx:value="14400"/> 
            <String fx:value="19200"/> 
            <String fx:value="38400"/> 
            <String fx:value="56000"/> 
            <String fx:value="115200"/>
        </FXCollections>
    </items>
</ComboBox>

这需要以下导入作为处理指令:

<?import java.lang.String?>
<?import javafx.collections.FXCollections?>
<小时/>

如果您需要将 baudRates 数组传递给 Controller ​​,您可以在这里找到一些解决方案:Passing Parameters JavaFX FXML

关于java - 从 swing jCombobox 迁移到 javaFX ComboBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38847945/

相关文章:

java - 我需要在使用尽可能少的内存的情况下快速找到该对象。我应该使用什么数据容器?

java - 在Java中显示图像

JavaFX HBox 边框

java - 如何在 Java 中等待按钮按下

java - 将评级值设置为文本框

JavaFX - ListView <?扩展 V> - 泛型 - CellFactory

java - Multi-Tenancy Spring JPA : Dynamic dialects resolution for dynamic datasources

Java swing 不显示源代码的更改

java - 如何在Windows机器上的mstor中设置读取收件箱的url

java - 如何从一个 JFrame 中引用另一个 JFrame 中的变量?