JavaFX-在表视图中显示数据

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

我想在GUI的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();
    }



}


公共类排行榜视图实现了可初始化{
@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());

谢谢你的回答。让我们结束了几个小时的沮丧。谢谢你的回答。让我们结束了几个小时的沮丧。