gpt4 book ai didi

JavaFX - 在 TableView 中显示数据

转载 作者:行者123 更新时间:2023-12-02 01:32:30 24 4
gpt4 key购买 nike

我想在 GUI 的表格 View 中显示数据库中的数据。

我尝试了很多方法都没有成功。代码运行没有错误,但 TableView 中仍然没有任何显示。

您能否帮助澄清我对如何执行此操作的理解。


public class LeaderBoardView implements Initializable {

@FXML private TableColumn<LeaderBoardData, String> colUsername;
@FXML private TableColumn<LeaderBoardData, Integer> colWins;
@FXML private TableColumn<LeaderBoardData, Integer> colWinPercentage;
@FXML private TableView<LeaderBoardData> tableLeaderboard;
private ObservableList<LeaderBoardData> data;


@Override
public void initialize(URL location, ResourceBundle resources) {

colUsername.setCellValueFactory(
new PropertyValueFactory<LeaderBoardData,String>("username"));
colWins.setCellValueFactory(
new PropertyValueFactory<LeaderBoardData, Integer>("wins"));
colWinPercentage.setCellValueFactory(
new PropertyValueFactory<LeaderBoardData, Integer>("winPercentage"));

buildLeaderBoardData();

}


public void buildLeaderBoardData() {
data = FXCollections.observableArrayList();
try {
ResultSet rs = UserDB.getLeaderBoardData();

while(rs.next()){
LeaderBoardData cm = new LeaderBoardData();

cm.username.set(rs.getString("username"));
cm.wins.set(rs.getInt("wins"));
cm.winPercentage.set(rs.getInt("winPercentage"));
data.add(cm);

//System.out.println(data.get());
}
tableLeaderboard.setItems(data);

} catch(Exception e) {
e.printStackTrace();
System.out.println("Error on Building Data");
}
}


public class LeaderBoardData {

public SimpleStringProperty username;
public SimpleIntegerProperty wins;
public SimpleIntegerProperty winPercentage;


// public UserData(String username, int wins, int winPercentage) {
// this.username = new SimpleStringProperty(username);
// this.wins = new SimpleIntegerProperty(wins);
// this.winPercentage = new SimpleIntegerProperty(winPercentage);
// }


public String getUsername() {
return username.get();
}



public Integer getUserWins() {
return wins.get();
}



public Integer getWinPercent() {
return winPercentage.get();
}



}

预期结果 - 获取表格 View 以显示用户排行榜、获胜次数、获胜百分比

最佳答案

每个 Java bean 属性名称均通过删除 getdecapitalizing 派生自相应 get 方法的名称。方法名称的其余部分。不以任何方式考虑字段,只考虑方法。

您的 LeaderBoardData 类具有这些 get 方法,它们对应于以下属性:

  • getUsername() → 属性“用户名”
  • getUserWins() → 属性“userWins”
  • getWinPercent() → 属性 "winPercent"

您必须准确使用上述属性名称:

colUsername.setCellValueFactory(
new PropertyValueFactory<LeaderBoardData,String>("username"));
colWins.setCellValueFactory(
new PropertyValueFactory<LeaderBoardData, Integer>("userWins"));
colWinPercentage.setCellValueFactory(
new PropertyValueFactory<LeaderBoardData, Integer>("winPercent"));

更好的方法是完全避免反射。像您这样的反射错误无法被编译器捕获,但直接调用方法的代码会被编译器检查。

首先,您需要让您的 LeaderBoardData 类以大多数 JavaFX 类提供的标准方式提供属性:一个属性方法和一个 get 方法(如果属性可写,则设置一个集合) -方法)。 javafx.scene.Node documentation说明了这一点。

就您而言,您的类(class)将如下所示:

public class LeaderBoardData {

private StringProperty username = new SimpleStringProperty();
private IntegerProperty wins = new SimpleIntegerProperty();
private IntegerProperty winPercentage = new SimpleIntegerProperty();

public StringProperty usernameProperty() {
return username;
}

public String getUsername() {
return username.get();
}

public void setUsername(String name) {
this.username.set(name);
}

public IntegerProperty userWinsProperty() {
return wins;
}

public int getUserWins() {
return wins.get();
}

public void setUserWins(int wins) {
this.wins.set(wins);
}

public IntegerProperty winPercentProperty() {
return winPercentage;
}

public int getWinPercent() {
return winPercentage.get();
}

public void setWinPercent(int percent) {
this.winPercentage.set(percent);
}
}

现在,您的单元格值工厂可以使用显式方法调用:

colUsername.setCellValueFactory(f -> f.getValue().usernameProperty());
colWins.setCellValueFactory(f -> f.getValue().userWinsProperty());
colWinPercentage.setCellValueFactory(f -> f.getValue().winPercentProperty());

关于JavaFX - 在 TableView 中显示数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55817045/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com