2016-09-14 6 views
2

У меня есть форма, которая должна быть отправлена ​​в базу данных mySQL, где одним из входов является ComboBox (JavaFX).Как преобразовать выделение в JavaFX ComboBox в String

При подаче на вход из ComboBox, добавленный в базу данных значение

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

не является значением String.

Как решить эту проблему, чтобы данные, представленные в базе данных, были выбраны String выбранного значения?

(Partial) 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); 
     } 
    } 

(Partial) Код 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 + "');"); 

Вы должны получить выбранное значение ComboBox с getValue методом:

rolePicker.getValue(); 

и вы можете использовать возвращаемое значение в выражении.

Примечание:getValue возвращает тип, какой тип ComboBox имеет в качестве общего параметра (тип элементов, хранящихся в ComboBox): public final T getValue(). В вашей текущей ситуации у вас есть ComboBox, в котором хранятся значения String (ComboBox<String>), поэтому возвращаемое значение может быть использовано напрямую.

+0

Большое вам спасибо! Работал как шарм. –

 Смежные вопросы

  • Нет связанных вопросов^_^