0

我正在开发一个程序,该程序将允许用户通过带有 javafx tableview tablecell 中的图像的切换按钮选择/添加声音作为收藏夹,并在数据库中设置声音的状态(更新收藏夹状态数据库有效)但是图像的更新仅部分有效。

按下切换按钮时,图像会像数据库一样正确更新

初始加载

初始加载输出

任何最喜欢的选择之前的前 10 条记录

在此处输入图像描述

按下按钮后

最喜欢的选择

数据库

在此处输入图像描述

但是当我停止并重新启动程序时问题就来了,因为我没有选择任何按钮(应该是声音 id 5)

在此处输入图像描述

这是数据库数据加载的代码

public void getSounds() {
        soundFilelist.removeAll(soundFilelist);

        try {
            Connection conn = DriverManager.getConnection("jdbc:sqlite:Sphere.db");
            // add where userId = VerifiedUserId or something simular//
            String sql = "SELECT * FROM Sounds Where userId = ? ";
            PreparedStatement ps;
            ResultSet rs;
            ps = conn.prepareStatement(sql);
            ps.setInt(1 , User.getUserId());
            rs = ps.executeQuery();
            while (rs.next()) {
                int favoriteStatus;
                soundFilelist.add(new Sound(

                        rs.getInt("SoundId") ,
                        rs.getString("SoundName") ,
                        rs.getString("soundPath") ,
                        rs.getLong("soundDurration") ,
                      favoriteStatus = rs.getInt("Favorite")));
                System.out.println(favoriteStatus);
if(favoriteStatus == 0){
    setFavoritesTableButton(0);

}else if(favoriteStatus == 1){
    setFavoritesTableButton(1);

}




                }


                soundBrowser.setItems(soundFilelist);





        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }


    }





                the addButtoncell code

(最喜欢的第 2 列)修改自https://riptutorial.com/javafx/example/27946/add-button-to-tableview

private void addButtonToTable() {


        Callback<TableColumn<Sound, Void>, TableCell<Sound, Void>> cellFactory = new Callback<TableColumn<Sound, Void>, TableCell<Sound, Void>>() {
            @Override
            public TableCell<Sound, Void> call(final TableColumn<Sound, Void> param) {
                favoritecell = new TableCell<>() {


                    private final ToggleButton btn = new ToggleButton();
                    private Image favoritesImage = new Image("SoundSphere/RegularSizeFavoritesImage.png");
                    private Image favoriteslPressedImage = new Image("SoundSphere/RegularSizeFavoriteslPressedImage.png");
                    private ImageView tableViewFavorites = new ImageView();


                    {


                        tableViewFavorites.setFitWidth(20);
                        tableViewFavorites.setFitHeight(20);
                        btn.setAlignment(Pos.CENTER);
                        // favoritecell.setAlignment(Pos.CENTER);
                        btn.setGraphic(tableViewFavorites);
                        btn.setOnAction((new EventHandler<ActionEvent>() {
                            @Override
                            public void handle(ActionEvent actionEvent) {
                                if ((btn.isSelected())) {
                                    Sound sound = getTableView().getItems().get(getIndex());
                                    sound.setSoundId(soundIdColumn.getCellData(sound));
                                   System.out.println("selected SID:  "+ sound.getSoundId());
                                  int  selectedSoundId2 = sound.getSoundId();
                                    tableViewFavorites.setImage(favoriteslPressedImage);
                                    tableviewFavoriteButtonIsPressed = false;
                                    //addFavorite();
                                    System.out.println("buttonselectedId"+ selectedSoundId);
                                    addFavorite2(selectedSoundId2);

                                }else{

                                    Sound sound = getTableView().getItems().get(getIndex());
                                    sound.setSoundId(soundIdColumn.getCellData(sound));
                                    int  selectedSoundId2 = sound.getSoundId();
                                    tableViewFavorites.setImage(favoritesImage);
                                    tableviewFavoriteButtonIsPressed = true;
                                    removeFavorite2(selectedSoundId2);
                                }

                            }

                            private void removeFavorite2(int selectedSoundId2) {



                                try{

                                    Connection conn = DriverManager.getConnection("jdbc:sqlite:Sphere.db");

                                    String sql = "UPDATE Sounds " +
                                            "SET Favorite = ?"+
//                                            "soundName = ?"+
                                            "Where soundId = ? AND  userId = ?";
                                    PreparedStatement ps;
                                    ps = conn.prepareStatement(sql);
                                    ps.setInt(1,0);
                                    ps.setInt(2 , selectedSoundId2);
                                    ps.setInt(3 , User.getUserId());
                                    ps.executeUpdate();
                                    System.out.println("Data has been removed");



                                }catch(Exception e){
                                    System.out.println("we have a problem with add favorite 2");
                                    e.printStackTrace();
                                }




                            }
                        }));




                            }

                            private void addFavorite2(int favoriteSoundId) {
                                try{

                                    Connection conn = DriverManager.getConnection("jdbc:sqlite:Sphere.db");

                                    String sql = "UPDATE Sounds " +
                                            "SET Favorite = ?"+
//                                            "soundName = ?"+
                                            "Where soundId = ? AND  userId = ?";
                                    PreparedStatement ps;
                                    ps = conn.prepareStatement(sql);
                                    ps.setInt(1,1);
                                    ps.setInt(2 , favoriteSoundId);
                                    System.out.println(favoriteSoundId);
                                    ps.setInt(3 , User.getUserId());
                                    ps.executeUpdate();
                                    System.out.println("Data has been inserted");



                                }catch(Exception e){
                                    System.out.println("we have a problem with add favorite 2");
                                    e.printStackTrace();
                                }




                            }











                    @Override
                    public void updateItem(Void item , boolean empty) {
                        super.updateItem(item , empty);
                        if (btn.isSelected() || dbFavorite) {

                            tableViewFavorites.setImage(tableFavoriteslPressedImage);
                            setGraphic(btn);
                        } if (!btn.isSelected() || !dbFavorite) {
                            tableViewFavorites.setImage(favoritesImage);
                            setGraphic(btn);

                        }
                    }
                };
                return favoritecell;
            }
        };

        favoritesColumn2.setCellFactory(cellFactory);

        soundBrowser.getColumns().add(favoritesColumn2);

    }



public boolean setFavoritesTableButton(int favoriteStatus){
        if(favoriteStatus == 1) {
            dbFavorite  = true;
        }else if(favoriteStatus == 0){
            dbFavorite = false;
        }



    return dbFavorite;
}

相关的可初始化代码

soundNameColumn.setCellValueFactory(new PropertyValueFactory<>("soundName"));
        soundPathColumn.setCellValueFactory(new PropertyValueFactory<>("soundPath"));
        soundDurationColumn.setCellValueFactory(new PropertyValueFactory<>("soundDurration"));
        favoritesColumn.setCellValueFactory(new PropertyValueFactory<>("Favorite"));
        addButtonToTable();








        getSounds();

我尝试在获取声音方法和各种布尔值中设置切换按钮的状态,但我的尝试都没有奏效。

感谢您的时间和任何帮助

托马斯·古斯塔夫森

4

0 回答 0