Populate tableview with two dimensional array

前端 未结 2 1541
谎友^
谎友^ 2021-01-18 07:43

Am new to Javafx and wondering how to populate a tableview from a 2-dimensional array of String:

    String[][] staffArray = (String[][]) connection.getAll(\         


        
2条回答
  •  执念已碎
    2021-01-18 08:28

    I think JavaFX should have a method that just takes 2d arrays and makes tables but it's not that hard to make. The trick is to use the CellValueFactory to get the right array index for each column instead of getting a bean. This is similar to code I use.

    import java.util.Arrays;
    import javafx.application.Application;
    import javafx.beans.property.SimpleStringProperty;
    import javafx.beans.value.ObservableValue;
    import javafx.collections.FXCollections;
    import javafx.collections.ObservableList;
    import javafx.scene.Scene;
    import javafx.scene.control.TableColumn;
    import javafx.scene.control.TableView;
    import javafx.scene.control.TableColumn.CellDataFeatures;
    import javafx.scene.layout.StackPane;
    import javafx.stage.Stage;
    import javafx.util.Callback;
    
    public class TableViewSample extends Application {
    
        @Override
        public void start(Stage primaryStage) {
            StackPane root = new StackPane();
            String[][] staffArray = {{"nice to ", "have", "titles"},
                                     {"a", "b", "c"},
                                     {"d", "e", "f"}};
            ObservableList data = FXCollections.observableArrayList();
            data.addAll(Arrays.asList(staffArray));
            data.remove(0);//remove titles from data
            TableView table = new TableView<>();
            for (int i = 0; i < staffArray[0].length; i++) {
                TableColumn tc = new TableColumn(staffArray[0][i]);
                final int colNo = i;
                tc.setCellValueFactory(new Callback, ObservableValue>() {
                    @Override
                    public ObservableValue call(CellDataFeatures p) {
                        return new SimpleStringProperty((p.getValue()[colNo]));
                    }
                });
                tc.setPrefWidth(90);
                table.getColumns().add(tc);
            }
            table.setItems(data);
            root.getChildren().add(table);
            primaryStage.setScene(new Scene(root, 300, 250));
            primaryStage.show();
        }
    }
    

提交回复
热议问题