JavaFx 在使用TableView的过程中,导入单元格数据出了些问题,下面将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>
@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>(
"排名");
两种方式:
模型类:
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"));
重写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;
}
});
ObservableList<Scores> data = FXCollections
.observableArrayList(scores);
ranking_table.setItems(data);