4

アプリケーションの成長に伴い、SQL クエリやデータ検証などを処理する追加のクラスを作成したいと考えています。現在、コントローラーがすべてを管理しています。

ただし、コントローラー クラス内のコンポーネントや .fxml ファイルと "通信" できるさまざまなクラスを作成する方法がわかりません。

私はこれを試みました: JavaFX 1 FXML File with Multiple Different Controllers?

..そして、次のようにテーブルにデータを入力する新しいクラスを作成しようとしました:

import java.sql.Connection;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;

public class DepartmentTable {

    private Connection conn;
    private FXMLLoader fxmlLoader;
    @FXML
    private TableView<Department> departmentTableView;// = new TableView<>(staffTypeList);
    @FXML
    private TableColumn<Department, Integer> departmentIdCol;
    @FXML
    private TableColumn<Department, String> departmentNameCol;
    private ObservableList<Department> departmentList;

    public DepartmentTable(Connection aconn, FXMLLoader loader) {
        this.conn = aconn;
        this.fxmlLoader=loader;
        loadController();
        populateDepartmentTable();
    }

    private void loadController(){
        fxmlLoader.setController(this);
    }

    private void populateDepartmentTable() {

        departmentList = new DepartmentData(conn).getDepartmentList();

        /*Populate the Table with StaffType objects*/
        departmentIdCol.setCellValueFactory(
                new PropertyValueFactory<Department, Integer>("departmentID"));
        departmentNameCol.setCellValueFactory(
                new PropertyValueFactory<Department, String>("departmentName"));

        departmentTableView.setItems(departmentList);
    }
}

ただし、NullPointerException によって引き起こされる invocationTargetException を取得します

/*Populate the Table with StaffType objects*/
        departmentIdCol.setCellValueFactory(

したがって、この時点で何をすべきかわかりません。

助けてください。ありがとうございました!

4

1 に答える 1

5

複数の FXML とコントローラーを作成する方が簡単です。1 FXML = 1 コントローラー。また、異なるコントローラ間でも問題なく通信できます。

この部分を見てくださいNested Controller

于 2013-07-02T07:00:23.780 に答える