我试图在JavaFX上使用不同的对象并堆叠在组合框上。它显示没有元素的列表。
public class Controller extends Application {
public void start(Stage primaryStage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
primaryStage.setTitle("Hello World");
primaryStage.setScene(new Scene(root, 300, 275));
primaryStage.show();
}
public Label label1 = new Label();
public CheckBox cbox1 = new CheckBox();
public ObservableList<String> options = FXCollections.observableArrayList(
"Option 1",
"Option 2",
"Option 3"
);
public ComboBox comboBox = new ComboBox(options);
......
<ComboBox id="comboBox" fx:id="comboBox" prefWidth="150.0"
GridPane.columnIndex="1" GridPane.rowIndex="11" />
......
答案 0 :(得分:1)
您没有将/usr/lib64
中的ComboBox
添加到FXML
中。而是要创建一个全新的Controller
(不会在您的场景中显示)。
您应该删除此行:
ComboBox
并替换为:
public ComboBox comboBox = new ComboBox(options);
然后只需设置组合框的项目即可。
@FXML
private ComboBox comboBox;
为什么??comboBox.setItems(options);
注释告诉JavaFX,您在@FXML
文件中定义了您在下一行中引用的ComboBox
。这使JavaFX可以将该对象“注入”到您的控制器中。
侧面说明:通常,将主类用作控制器类不是一个好主意(我建议为FXML创建一个单独的控制器类)。您的控制器类还应该包含一个
FXML
方法(以private void initialize()
注释)。您可以在此处设置场景控件的参数。大多数介绍性的JavaFX教程将引导您完成该过程。