JavaFx tableview 设置单元格

问题导入:

JavaFx 在使用TableView的过程中,导入单元格数据出了些问题,下面将TableView导入数据做一总结归纳。

具体步骤

1.FXML中建立TableView视图

<TableView fx:id="ranking_table" prefHeight="447.0" prefWidth="781.0" stylesheets="@../css/fullpackstyling.css" HBox.hgrow="ALWAYS">
    <columns>
        <TableColumn fx:id="Name" text="姓名" />
        <TableColumn fx:id="Department" text="单位" />
        <TableColumn fx:id="Age" text="年龄" />
        <TableColumn fx:id="Run3km" text="3KM" />
        <TableColumn fx:id="Score1" text="分数" />
        <TableColumn fx:id="Sit_ups" prefWidth="84.0" text="仰卧起坐" />
        <TableColumn fx:id="Score2" prefWidth="46.0" text="分数" />
        <TableColumn fx:id="horizontal_bar" text="单杠" />
        <TableColumn fx:id="Score3" text="分数" />
        <TableColumn fx:id="Serpentine_run" text="蛇形跑" />
        <TableColumn fx:id="Score4" text="分数" />
        <TableColumn fx:id="TotalScore" text="总分" />
        <TableColumn fx:id="Ranking" text="排名" />
    </columns>
    <columnResizePolicy>
        <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
    </columnResizePolicy>
</TableView>

2.声明表中各列

@FXML
private TableColumn<Scores, String> Name = new TableColumn<Scores, String>(
        "姓名");
@FXML
private TableColumn<Scores, String> Department = new TableColumn<Scores, String>(
        "单位");
@FXML
private TableColumn<Scores, Integer> Age = new TableColumn<Scores, Integer>(
        "年龄");
@FXML
private TableColumn<Scores, String> Run3km = new TableColumn<Scores, String>(
        "3KM");
@FXML
private TableColumn<Scores, Integer> Score1 = new TableColumn<Scores, Integer>(
        "成绩1");
@FXML
private TableColumn<Scores, Integer> Sit_ups = new TableColumn<Scores, Integer>(
        "仰卧起坐");
@FXML
private TableColumn<Scores, Integer> Score2 = new TableColumn<Scores, Integer>(
        "成绩2");
@FXML
private TableColumn<Scores, Integer> horizontal_bar = new TableColumn<Scores, Integer>(
        "单杠");
@FXML
private TableColumn<Scores, Integer> Score3 = new TableColumn<Scores, Integer>(
        "成绩3");
@FXML
private TableColumn<Scores, String> Serpentine_run = new TableColumn<Scores, String>(
        "蛇形跑");
@FXML
private TableColumn<Scores, Integer> Score4 = new TableColumn<Scores, Integer>(
        "成绩4");
@FXML
private TableColumn<Scores, Integer> TotalScore = new TableColumn<Scores, Integer>(
        "总分");
@FXML
private TableColumn<Scores, Number> Ranking = new TableColumn<Scores, Number>(
        "排名");

3.插入数据

两种方式:

(1)根据模型类中的属性对应相应列

模型类:

private Students students;
private String Name;
private String Department;
private int Age;
private String Run3km;
private int Score1;
private int Sit_ups;
private int Score2;
private int horizontal_bar;
private int Score3;
private String Serpentine_run;
private int Score4;
private int TotalScore;
private int Ranking;
private int data;
Name.setCellValueFactory(new PropertyValueFactory<>("Name"));
Department.setCellValueFactory(new PropertyValueFactory<>("Department"));
Age.setCellValueFactory(new PropertyValueFactory<>("Age"));
Run3km.setCellValueFactory(new PropertyValueFactory<>("Run3km"));
Score1.setCellValueFactory(new PropertyValueFactory<>("Score1"));
Sit_ups.setCellValueFactory(new PropertyValueFactory<>("Sit_ups"));
Score2.setCellValueFactory(new PropertyValueFactory<>("Score2"));
horizontal_bar.setCellValueFactory(new PropertyValueFactory<>("horizontal_bar"));
Score3.setCellValueFactory(new PropertyValueFactory<>("Score3"));
Serpentine_run.setCellValueFactory(new PropertyValueFactory<>("Serpentine_run"));
Score4.setCellValueFactory(new PropertyValueFactory<>("Score4"));
TotalScore.setCellValueFactory(new PropertyValueFactory<>("TotalScore"));

(2)原始的插入方式

重写setCellValueFactory方法,注意如果是Integer,double泛型统一用Number,param为当前模型类的指向。

Ranking.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<Scores, Number>, ObservableValue<Number>>() {
    @Override
    public ObservableValue<Number> call(TableColumn.CellDataFeatures<Scores, Number> param) {
        Collections.sort(Ranking_data, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                if(o1>= o2) {
                    return -1;
                }
                else {
                    return 1;
                }
            }
        });
        System.out.println(Ranking_data);
        int Ranks = Ranking_data.indexOf(param.getValue().getTotalScore())+1;
        SimpleIntegerProperty ranking = new SimpleIntegerProperty(Ranks);
        return ranking;
    }
});

4.录入数据

ObservableList<Scores> data = FXCollections
        .observableArrayList(scores);
ranking_table.setItems(data);

你可能感兴趣的:(JavaFx)