Табличное представление Javafx в scenebuilder не вставляет пользовательский ввод - PullRequest
0 голосов
/ 01 декабря 2018

В настоящее время я работаю над проектом, в котором я пытаюсь реализовать TableView, который принимает пользовательский ввод (имя, рейтинг, название ресторана).Ниже я предоставил свой код, который уже находится в моем классе контроллера.Проблема, с которой я сталкиваюсь, заключается в том, что всякий раз, когда я что-то печатаю в текстовых полях и нажимаю кнопку «отправить», это абсолютно ничего не делает.В чем может быть проблема?

Вот начало и конец моего кода, я не включил остальные, потому что метод Login является единственным, который вызывает у меня проблемы при попытке инициализации.

public class MainController{


@FXML
private Label lblStatus;
@FXML
private TextField txtUsername;
@FXML
private TextField txtPassword;



/*This method allows user login and when login is successful then user is taken to the main screen.*/     


public void Login (ActionEvent event) throws Exception {
    if (txtUsername.getText().equals("user") && txtPassword.getText().equals("pass")) {
        lblStatus.setText("Login Success");
        Stage primaryStage = new Stage();
        Parent root = FXMLLoader.load(getClass().getResource("/application/RestScene.fxml"));
        Scene scene = new Scene(root,400,400);
        scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
        primaryStage.setTitle("Restaurant Advisor");
        primaryStage.setScene(scene);
        primaryStage.show();
    }
    else
    {
        lblStatus.setText("Login Failed");
    }
}



public TableView<Table> tableview;
public TableColumn<Table, String> colName;
public TableColumn<Table, Integer> colRating;
public TableColumn<Table, String>colRestaurants;
public TextField txtFieldName;
public TextField txtFieldRating;
public TextField txtFieldRestaurant;

public void initialize(URL location, ResourceBundle resources) {
    colName.setCellValueFactory(new PropertyValueFactory<>("TableName"));
    colRating.setCellValueFactory(new PropertyValueFactory<>("TableRating"));
    colRestaurants.setCellValueFactory(new PropertyValueFactory<>("TableRestaurants"));
    tableview.setItems(observableList);
}

ObservableList<Table> observableList = FXCollections.observableArrayList(new Table ("Test", 1, "makiyaki"));


public void buttonSubmit(ActionEvent event) {

    Table table = new Table (txtFieldName.getText(), Integer.parseInt(txtFieldRating.getText()), txtFieldRestaurant.getText());
    tableview.getItems().add(table);
}

Вот код FXML для конкретного табличного представления

    <AnchorPane layoutX="596.0" layoutY="338.0" prefHeight="284.0" prefWidth="461.0">
         <children>
            <TableView fx:id="tableview" layoutX="-3.0" layoutY="-1.0" prefHeight="243.0" prefWidth="315.0">
              <columns>
                <TableColumn prefWidth="75.0" text="Name" />
                <TableColumn prefWidth="75.0" text="Rating" />
                  <TableColumn prefWidth="75.0" text="Restaurant" />
              </columns>
            </TableView>
            <TextField fx:id="txtFieldName" layoutX="39.0" layoutY="253.0" prefHeight="12.0" prefWidth="83.0" promptText="Name" />
            <TextField fx:id="txtFieldRating" layoutX="173.0" layoutY="249.0" prefHeight="12.0" prefWidth="83.0" promptText="Rating" />
            <TextField fx:id="txtFieldRestaurant" layoutX="317.0" layoutY="239.0" prefHeight="12.0" prefWidth="83.0" promptText="Restaurant" />
            <Button layoutX="341.0" layoutY="58.0" mnemonicParsing="false" onAction="#buttonSubmit" text="Submit" />
         </children>
      </AnchorPane>
   </children>
</AnchorPane>

Ответы [ 2 ]

0 голосов
/ 01 декабря 2018
  • Вы не вставили fx:id в столбцы таблицы в формате fxml.Это вызовет исключение NullPointerException в вашем initalize(), как только вы его запустите, из того, что вы сказали, что ничего не происходит, когда вы нажимаете на submit, это означает, что приложение initialize() не было вызвано в первую очередь.

  • Ваш initialize() должен быть безошибочным методом, чтобы его вызывали. См. Здесь , или же, если вы хотите сделать это по-своему, например, initialize(URL, ResourceBundle) заставит ваш контроллер реализовать вышеупомянутый Initializable интерфейс

  • .готово
0 голосов
/ 01 декабря 2018

Вам не хватает тега @FXML в вашем buttonSubmit методе

...