我正在尝试创建JavaFX程序来管理生产线。我正在使用数据库,以便用户可以使用TextFieldChoiceBox填充数据库。我在从我创建的Enum类中填充ChoiceBox时遇到问题。

预计我的ChoiceBox将填充我的Enum类中的项目,但是ChoiceBox保持空白。代码正在编译。

在您将我引荐至this link之前,我已经尝试使用该讨论中的建议,但是我无法全神贯注于此。该讨论无济于事,因为我不确定他们在哪里尝试填充其ComboBox。另外,cbxStatus.getItems().setAll(Status.values());对我不起作用(我可能未正确应用它)。

我的Enum类:

package sample;

public enum ItemType {
    AUDIO("AU"),
    VISUAL("VI"),
    AUDIOMOBILE("AM"),
    VISUALMOBILE("VM");

    final String itemType;

    ItemType(String itemType) {
        this.itemType = itemType;
    }

    public String getItemType() {
        return itemType;
    }
}


我的控制器类:

package sample;

import javafx.collections.FXCollections;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.ChoiceBox;
import javafx.scene.control.TextField;

import java.sql.SQLException;

public class Controller {
    @FXML
    private TextField productName;
    @FXML
    private TextField productManufacturer;
    @FXML
    private ChoiceBox<ItemType> itemType = new ChoiceBox<>();

    private DatabaseManager databaseManager = new DatabaseManager();

    public Controller() throws SQLException {
    }

    @FXML
    public void initialize() {
        itemType.getItems().setAll(ItemType.values());
    }

    public void addProduct() {
        String name = productName.getText();
        String manufacturer = productManufacturer.getText();
        String type = itemType.toString();

        databaseManager.insert(type, manufacturer, name);
        System.out.println("Button Pressed");
    }

    public void recordProduction(ActionEvent actionEvent) {
        System.out.println("Button Pressed");
    }
}


最后,一旦ChoiceBox被填充,我需要捕获用户的选择以输入到我的数据库中。类似于String type = itemType.toString();

最佳答案

我认为您缺少明显之处,而在思考新事物,Enum是问题所在。

    @FXML
    private ChoiceBox<ItemType> itemType = new ChoiceBox<>();


控制器的字段可以访问一个ChoiceBox实例,而表单上的一个实例则是另一实例。您从未将项目添加到与之交互的选择框中。

10-06 08:54