SceneBuilder中的Javafx表视图未插入用户输入

时间:2018-12-01 01:11:25

标签: javafx scenebuilder

我目前正在一个项目中,我正在尝试实现一个接受用户输入(名称,等级,餐厅名称)的socket.on('disconnect', () => { // reconnect }) 。下面,我提供了我的Controller类中已经存在的代码。我遇到的问题是,每当我在文本字段中键入任何内容并单击“提交”按钮时,它绝对不会执行任何操作。可能是什么问题?

这是代码的开头和结尾,我没有包括其余部分,因为Login方法是唯一一种在尝试初始化时给我带来麻烦的方法。

TableView

这是特定表视图的FXML代码

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

2 个答案:

答案 0 :(得分:1)

  • 您尚未将fx:id插入fxml的表列中。它会在您运行的initalize()中立即引起NullPointerException,从您所说的当您单击提交时就什么也没有发生,这意味着应用程序在第一个未调用initialize()地点。

  • 您的initialize()必须是no-arg方法,才能被调用。 See here,否则,如果您想按照自己的方式进行操作,即initialize(URL, ResourceBundle)使您的控制器实现上述Initializable接口

  • 通过this question once your're done

答案 1 :(得分:-1)

您在buttonSubmit方法上缺少@FXML标记