0

私はここの初心者です。JavFX のテーブル ビュー、つまり tblStudentには必要な
レコードが含まれていません。これを行う方法、私を助けてください。

    public void populateData(){
      Connection c ;
      data = FXCollections.observableArrayList();
      try{
        c = ConnectionClass.connect();
        //SQL FOR SELECTING ALL OF CUSTOMER
        String SQL = "SELECT * FROM `student`";
        //ResultSet
        ResultSet rs = c.createStatement().executeQuery(SQL);


        studentIDCol = new TableColumn("Student ID");
        nameCol = new TableColumn("Name");
        addressCol = new TableColumn("Address");
        ageCol = new TableColumn("Age");
        contactnoCol = new TableColumn("Contact Number");

        while(rs.next()){
            //Iterate Row
            ObservableList<String> row = FXCollections.observableArrayList();

            row.add(rs.getString("id"));
            row.add(rs.getString("name"));
            row.add(rs.getString("address"));
            row.add(rs.getString("age"));
            row.add(rs.getString("contact_num"));

            System.out.println("Row [1] added "+row );
            data.add(row);

        }

        //FINALLY ADDED TO TableView
        tblStudent.getItems().setAll(data);
      }catch(Exception e){
          e.printStackTrace();
          System.out.println("Error on Building Data");             
      }
 }

これを知っている人はいますか?

4

1 に答える 1

3

次のように、セル値ファクトリをすべての列に設定する必要があります。

TableColumn<ObservableList<String>, String> studentIDCol  = new TableColumn<>("Student ID");
    studentIDCol.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<ObservableList<String>,String>, ObservableValue<String>>() {         
        @Override
        public ObservableValue<String> call(CellDataFeatures<ObservableList<String>, String> cdf) {     
            return new SimpleStringProperty(cdf.getValue().get(0));
        }
    });

また、クエリが JavaFX スレッドをブロックするため、クエリをサービスに抽出することをお勧めします。http://docs.oracle.com/javafx/2/threads/jfxpub-threads.htmを確認してください。

この完全な例をテスト データで確認してください。

public void start(Stage stage) throws Exception {
    VBox vbox = new VBox(10.0);
    vbox.setAlignment(Pos.CENTER);

    final TableView<ObservableList<String>> table = new TableView<>();

    TableColumn<ObservableList<String>, String> studentIDCol  = new TableColumn<>("Student ID");
    studentIDCol.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<ObservableList<String>,String>, ObservableValue<String>>() {         
        @Override
        public ObservableValue<String> call(CellDataFeatures<ObservableList<String>, String> cdf) {     
            return new SimpleStringProperty(cdf.getValue().get(0));
        }
    }); 

    TableColumn<ObservableList<String>, String> nameCol = new TableColumn<>("Name");
    nameCol.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<ObservableList<String>,String>, ObservableValue<String>>() {          
        @Override
        public ObservableValue<String> call(CellDataFeatures<ObservableList<String>, String> cdf) {     
            return new SimpleStringProperty(cdf.getValue().get(1));
        }
    });     

    TableColumn<ObservableList<String>, String> addressCol  = new TableColumn<>("Address");
    addressCol.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<ObservableList<String>,String>, ObservableValue<String>>() {           
        @Override
        public ObservableValue<String> call(CellDataFeatures<ObservableList<String>, String> cdf) {     
            return new SimpleStringProperty(cdf.getValue().get(2));
        }
    });     

    TableColumn<ObservableList<String>, String> ageCol  = new TableColumn<>("Age");
    ageCol.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<ObservableList<String>,String>, ObservableValue<String>>() {           
        @Override
        public ObservableValue<String> call(CellDataFeatures<ObservableList<String>, String> cdf) {     
            return new SimpleStringProperty(cdf.getValue().get(3));
        }
    });     

    TableColumn<ObservableList<String>, String> contactnoCol  = new TableColumn<>("Contact Number");
    contactnoCol.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<ObservableList<String>,String>, ObservableValue<String>>() {         
        @Override
        public ObservableValue<String> call(CellDataFeatures<ObservableList<String>, String> cdf) {     
            return new SimpleStringProperty(cdf.getValue().get(4));
        }
    });     

    table.getColumns().add(studentIDCol);
    table.getColumns().add(nameCol);
    table.getColumns().add(addressCol);
    table.getColumns().add(ageCol);
    table.getColumns().add(contactnoCol);   

    final ProgressBar bar = new ProgressBar(-1);
    bar.setVisible(false);

    final Button button = new Button("Fill");
    button.setOnAction(new EventHandler<ActionEvent>() {            
        @Override
        public void handle(ActionEvent event) {
            final Service<ObservableList<ObservableList<String>>> service = new Service<ObservableList<ObservableList<String>>>() {                 
                @Override
                protected Task<ObservableList<ObservableList<String>>> createTask() {
                    return new Task<ObservableList<ObservableList<String>>>() {
                        @Override
                        protected ObservableList<ObservableList<String>> call() throws Exception {
                            ObservableList<ObservableList<String>> items = FXCollections.observableArrayList();
                            items.add(FXCollections.observableArrayList("1", "2", "3", "4", "5"));
                            items.add(FXCollections.observableArrayList("1", "2", "3", "4", "5"));
                            items.add(FXCollections.observableArrayList("1", "2", "3", "4", "5"));
                            //Here the code for the query
                            Thread.sleep(5000);//To see the progress
                            return items;
                        }
                    };
                }
            };

            bar.visibleProperty().bind(service.runningProperty());
            button.disableProperty().bind(service.runningProperty());
            table.itemsProperty().bind(service.valueProperty());

            service.start();
        }
    });     

    vbox.getChildren().addAll(table, button, bar);
    Scene scene = new Scene(vbox, 300, 300);
    stage.setScene(scene);
    stage.show();
}

FXML ファイルを使用している場合。TableColumn の初期化手順をスキップする必要があります。

@FXML アノテーションを使用して、コントローラ クラスのファイル内のフィールドとして TableColumn を宣言します。javafx.fxml.Initializable を実装していることを確認してください。また、初期化メソッドでは、すべての列の構成側を実行できます。また、列は既にテーブル ビューにあるため、テーブルへの列の追加は避けてください。

FXML で TableView を次のように定義している場合のサンプルを次に示します。

<TableView layoutX="145.0" layoutY="76.0" prefHeight="200.0" prefWidth="200.0">
  <columns>
    <TableColumn prefWidth="75.0" text="Student ID" fx:id="studentIDCol" />
    <TableColumn prefWidth="75.0" text="Name" fx:id="nameCol" />
    <TableColumn prefWidth="75.0" text="Address" fx:id="addressCol" />
    <TableColumn prefWidth="75.0" text="Age" fx:id="ageCol" />
  </columns>
</TableView>

次に、コントローラークラスは次のようになります。

class YourTest implements javafx.fxml.Initializable{
//More Code
@FXML
TableColumn<ObservableList<String>, String> studentIDCol;
@FXML
TableColumn<ObservableList<String>, String> nameCol;
@FXML
TableColumn<ObservableList<String>, String> addressCol;
@FXML
TableColumn<ObservableList<String>, String> ageCol;
//More of your code 
@Override
public void initialize(URL arg0, ResourceBundle arg1) {
    studentIDCol.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<ObservableList<String>,String>, ObservableValue<String>>() {         
        @Override
        public ObservableValue<String> call(CellDataFeatures<ObservableList<String>, String> cdf) {     
            return new SimpleStringProperty(cdf.getValue().get(0));
        }
    }); 

    nameCol.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<ObservableList<String>,String>, ObservableValue<String>>() {          
        @Override
        public ObservableValue<String> call(CellDataFeatures<ObservableList<String>, String> cdf) {     
            return new SimpleStringProperty(cdf.getValue().get(1));
        }
    });             

    addressCol.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<ObservableList<String>,String>, ObservableValue<String>>() {           
        @Override
        public ObservableValue<String> call(CellDataFeatures<ObservableList<String>, String> cdf) {     
            return new SimpleStringProperty(cdf.getValue().get(2));
        }
    });     

    ageCol.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<ObservableList<String>,String>, ObservableValue<String>>() {           
        @Override
        public ObservableValue<String> call(CellDataFeatures<ObservableList<String>, String> cdf) {     
            return new SimpleStringProperty(cdf.getValue().get(3));
        }
    });     

    contactnoCol.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<ObservableList<String>,String>, ObservableValue<String>>() {         
        @Override
        public ObservableValue<String> call(CellDataFeatures<ObservableList<String>, String> cdf) {     
            return new SimpleStringProperty(cdf.getValue().get(4));
        }
    });  
}
//More of your Code
}

それが役に立てば幸い。

于 2013-06-04T10:14:16.057 に答える