Как манипулировать TableView из другого контроллера? - PullRequest
0 голосов
/ 26 июня 2019

Примечание: AlbumAvailble - это ComboBox, содержащий альбомы певца. : Доступен Певец, а ComboBox поддерживает певцов.

Я пытаюсь отобразить песни альбома в TableView в другом диалоге, который называется «DisplaySongs.fxml».

Я пытался создать метод в контроллере «DisplaySongs.java» для «DisplaySongs.fxml», чтобы добавить все песни альбома в таблицу. поэтому в методе, который будет отображать диалоговое окно, я передал selectedItem объекта AlbumAvailble и получил его список песен.

контроллер главного окна:

@FXML
public void Display() {
    Dialog<ButtonType>DisplaySong = new Dialog<>();
    DisplaySong.initOwner(DisplayBorder.getScene().getWindow());
    DisplaySong.setTitle("DisPlay Songs");
    FXMLLoader fxmlLoader = new FXMLLoader();
    fxmlLoader.setLocation(getClass().getResource("DisplaySongs.fxml"));
    try {
        DisplaySong.getDialogPane().setContent(fxmlLoader.load());
    }catch (IOException E){
        E.getStackTrace();
    }
    DisplaySong.getDialogPane().getButtonTypes().add(ButtonType.CLOSE);
    Optional<ButtonType> result = DisplaySong.showAndWait();
    if(result.isPresent()) {
        DisplaySongs controller = fxmlLoader.getController();
        controller.Display(AlbumAvailble.getSelectionModel().getSelectedItem());
    }
}

Контроллер отображения песен:

public class DisplaySongs {

    @FXML
    private TableView<Song> Songs ;

    public void Display(Album Alb) {
        Songs.getItems().addAll(Alb.getSongsList());
    }
}

Класс Песни:

package MusicManiPulation;

import javafx.beans.property.SimpleStringProperty;

import java.time.LocalDate;

public class Song {

    private SimpleStringProperty SongName = new SimpleStringProperty("") ;
    private SimpleStringProperty SongLength = new SimpleStringProperty("");
    private LocalDate ReleasedDay ;

    public Song(String songName, String songLength, LocalDate releasedDay) {
        SongName.set(songName);
        SongLength.set(songLength);
        ReleasedDay = releasedDay;
    }

    public String getSongName() {
        return SongName.get();
    }

    public void setSongName(String songName) {
        SongName.set(songName);
    }

    public String getSongLength() {
        return SongLength.get();
    }

    public void setSongLength(String songLength) {
        SongLength.set(songLength);
    }

    public LocalDate getReleasedDay() {
        return ReleasedDay;
    }

    public void setReleasedDay(LocalDate releasedDay) {
        ReleasedDay = releasedDay;
    }
}

Класс альбома:

package MusicManiPulation;

import java.time.LocalDate;
import java.util.ArrayList;

public class Album {

    private String AlbumNam ;

    ArrayList<Song> SongsList ;

    public Album(String albumNam) {
        AlbumNam = albumNam;
        this.SongsList = new ArrayList<>();
    }

    public boolean addNewSongToAlbum(String SongName , String SongLength , LocalDate ReleadsedDay) {

        boolean song = findSong(SongName);

        if (song) {
            return false;
        }
        SongsList.add(new Song(SongName , SongLength,ReleadsedDay));
        return true;
    }


    public boolean removeSong(String SongName){
        for(Song song :SongsList){
            if(song.getSongName().equalsIgnoreCase(SongName)){
                SongsList.remove(song);
                return true;
            }
        }
        return false;
    }

    private boolean findSong(String SongName){

        for(Song song:SongsList){
            if(song.getSongName().equalsIgnoreCase(SongName)){
                return true;
           }
        }
        return false;
    }

    public String getAlbumNam() {
        return AlbumNam;
    }

    public ArrayList<Song> getSongsList() {
        return SongsList;
    }

    @Override
    public String toString() {
        return AlbumNam;
    }
}

метод getSongList в классе Album:

public ArrayList<Song> getSongsList() {
    return SongsList;
}

Каждый раз, когда я нажимаю кнопку «Дисплей», таблица пуста

1 Ответ

1 голос
/ 27 июня 2019
public void Display(){

       Dialog<ButtonType>DisplaySong = new Dialog<>();
        DisplaySong.initOwner(DisplayBorder.getScene().getWindow());
        DisplaySong.setTitle("DisPlay Songs");
        FXMLLoader fxmlLoader = new FXMLLoader();
        fxmlLoader.setLocation(getClass().getResource("DisplaySongs.fxml"));
        try {
            DisplaySong.getDialogPane().setContent(fxmlLoader.load());
        }catch (IOException E){
            E.getStackTrace();
        }
        DisplaySong.getDialogPane().getButtonTypes().add(ButtonType.CLOSE);
        System.out.println("BEFORE Show");
        //Optional<ButtonType> result = DisplaySong.showAndWait(); //removed this line too
        DisplaySong.show();

      // if(result.isPresent()){ REMOVED THIS LINE.
     // YOU FORGOT THE CAST HERE :
         DisplaySongs controller = (DisplaySongs) fxmlLoader.getController(); 
            controller.Display(AlbumAvailble.getSelectionModel().getSelectedItem());

}
...