JavaFX-在表视图中显示数据
我想在GUI的tableview中显示数据库中的数据 我试过很多不同的方法,但都没有用。代码运行时没有错误,但表视图中仍然没有显示任何内容 你能帮我澄清一下我对如何做到这一点的理解吗JavaFX-在表视图中显示数据,java,javafx,tableview,fxml,Java,Javafx,Tableview,Fxml,我想在GUI的tableview中显示数据库中的数据 我试过很多不同的方法,但都没有用。代码运行时没有错误,但表视图中仍然没有显示任何内容 你能帮我澄清一下我对如何做到这一点的理解吗 public class LeaderBoardView implements Initializable { @FXML private TableColumn<LeaderBoardData, String> colUsername; @FXML private TableCol
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();
}
}
公共类排行榜视图实现了可初始化{
@FXML私有表列colUsername;
@FXML私有表列colWins;
@FXML私有表列colWinPercentage;
@FXML private TableView桌面排行榜;
私有可观测列表数据;
@凌驾
公共void初始化(URL位置、ResourceBundle资源){
colUsername.setCellValueFactory(
新的PropertyValueFactory(“用户名”);
colWins.setCellValueFactory(
新地产价值工厂(“wins”);
colWinPercentage.setCellValueFactory(
新的PropertyValueFactory(“winPercentage”);
构建排行榜数据();
}
public void Builder排行榜数据(){
data=FXCollections.observearraylist();
试一试{
ResultSet rs=UserDB.getLeaderBoardData();
while(rs.next()){
排行榜数据cm=新的排行榜数据();
cm.username.set(rs.getString(“用户名”);
cm.wins.set(rs.getInt(“wins”));
cm.winPercentage.set(rs.getInt(“winPercentage”);
添加数据(cm);
//System.out.println(data.get());
}
表格排行榜。集合项目(数据);
}捕获(例外e){
e、 printStackTrace();
System.out.println(“建筑数据错误”);
}
}
公共类排行榜数据{
公共SimpleStringProperty用户名;
公共SimpleIntegerProperty获胜;
公共SimpleIntegerProperty winPercentage;
//公共用户数据(字符串用户名、int-wins、int-winPercentage){
//this.username=新的SimpleStringProperty(用户名);
//this.wins=新的SimpleIntegerProperty(wins);
//this.winPercentage=新的SimpleIntegerProperty(winPercentage);
// }
公共字符串getUsername(){
返回username.get();
}
公共整数getUserWins(){
return wins.get();
}
公共整数getWinPercent(){
返回winPercentage.get();
}
}
预期结果-要使表视图显示用户、Wins、Win百分比的领导板,每个Java bean属性名称都是从相应的get方法的名称派生而来的,方法是删除
get
和方法名称的其余部分。不考虑任何字段,只考虑方法
您的排行榜数据
类具有以下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"));
现在,您的单元格值工厂可以使用显式方法调用:
colUsername.setCellValueFactory(f -> f.getValue().usernameProperty());
colWins.setCellValueFactory(f -> f.getValue().userWinsProperty());
colWinPercentage.setCellValueFactory(f -> f.getValue().winPercentProperty());
每个JavaBean属性名称都是从相应的get方法的名称派生出来的,方法是删除
get
和方法名称的其余部分
您的排行榜数据
类具有以下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"));
现在,您的单元格值工厂可以使用显式方法调用:
colUsername.setCellValueFactory(f -> f.getValue().usernameProperty());
colWins.setCellValueFactory(f -> f.getValue().userWinsProperty());
colWinPercentage.setCellValueFactory(f -> f.getValue().winPercentProperty());
谢谢你的回答。让我们结束了几个小时的沮丧。谢谢你的回答。让我们结束了几个小时的沮丧。