如何将 JavaFX ComboBox 中的选择转换为字符串

Posted

技术标签:

【中文标题】如何将 JavaFX ComboBox 中的选择转换为字符串【英文标题】:How to convert selection in JavaFX ComboBox to String 【发布时间】:2017-01-22 00:36:35 【问题描述】:

我有一个要提交到 mysql 数据库的表单,其中一个输入是 ComboBox (JavaFX)。

从ComboBox提交输入时,添加到数据库的值为

"ComboBox[id=rolePicker, styleClass=combo-box-base combo-box]"

不是String 值。

如何解决这个问题,让提交给数据库的数据是一个String的选择值?

(部分)JAVA控制器代码:

public class NewUserController implements Initializable, ControlledScreen 

    @FXML
    TextField nameField;
    @FXML
    TextField usernameField;
    @FXML
    TextField emailField;
    @FXML
    ComboBox rolePicker;

    @FXML
    public void submitUser(ActionEvent event) 
        String dbUsername = "root";
        String dbPassword = "secret";
        String dbURL = "jdbc:mysql://localhost:3306/uia";

        try 
            Connection conn = DriverManager.getConnection(dbURL, dbUsername, dbPassword);
            Statement statement = (Statement) conn.createStatement();
            statement.execute("INSERT INTO user (name, username, password, email, userrole) VALUES ('" + nameField.getText() + "', '" + usernameField.getText() + "', '" + usernameField.getText() + "', '" + emailField.getText() + "', '" + rolePicker + "');");

         catch (SQLException e) 
            System.out.println(e);
        
    

(部分)FXML 代码:

<ComboBox id="rolePicker" fx:id="rolePicker" editable="true" maxHeight="25.0" maxWidth="225.0" minHeight="25.0" minWidth="225.0" prefHeight="25.0" prefWidth="225.0" promptText="Role.." visibleRowCount="4">
    <items>
        <FXCollections fx:factory="observableArrayList">
            <String fx:value="TEACHER" />
            <String fx:value="STUDENT" />
        </FXCollections>
    </items>
</ComboBox>

【问题讨论】:

【参考方案1】:

在下一行中,您在字符串表达式中使用了rolePicker,因此编译器将在此对象上调用toString() 方法以获取对象的字符串表示形式,从而导致上述输出:

statement.execute("INSERT INTO user (name, username, password, email, userrole) VALUES ('" + 
nameField.getText() + "', '" + usernameField.getText() + "', '" + usernameField.getText() + "', '" + emailField.getText() + 
"', '" + rolePicker + "');");

您应该使用getValue 方法获得ComboBox 的选定值:

rolePicker.getValue();

您可以在表达式中使用返回的值。

注意: getValue 将返回 ComboBox 所具有的类型作为泛型参数(存储在 ComboBox 中的项目的类型):public final T getValue()。在您当前的情况下,您有一个 ComboBox 存储 String 值(ComboBox&lt;String&gt;),因此可以直接使用返回的值。

【讨论】:

非常感谢!像魅力一样工作。

以上是关于如何将 JavaFX ComboBox 中的选择转换为字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 javafx 中的渲染错误(ComboBox、ListView)

如何为 JavaFX 中的 ComboBox 中的项目添加值

如何检查是不是在 JavaFX ComboBox 中选择了任何项目

JavaFX ComboBox - 显示文本但在选择时返回 ID

javafx 创建 ComboBox TableCell

JavaFX:GridPane 中的 ComboBox 导致不必要的大小调整