我有一个旧的 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/