Я не уверен на 100%, как лучше всего описать эту проблему, но я буду стараться изо всех сил.
Я занимаюсь разработкой приложения musi c, у меня разные windows в одном и я загрузил панели в небольшое окно приложения, показанное ниже:
Бит, который меняется с зеленой кнопки на экран списка воспроизведения, - это окно, в которое загружены файлы F XML.
Я недавно создал часть приложения, которая воспроизводит песни из кнопки в этом небольшом окне приложения, но медиаплеер находится в главном контроллере приложения и должен быть здесь, поскольку он обновляет значения двух ползунков внизу.
Я видел кое-что о ссылке на точный экземпляр контроллера, который я использую для основного приложения, но я не уверен, как это сделать. Я пытался создать stati c версию mainAppController, но это был отдельный экземпляр, и поэтому он не ссылался должным образом.
Единственный метод, на который мне нужно сослаться, - это метод addPlayerListener. Я попытался сделать это stati c, но поскольку он имел дело со слайдером и т. Д. Из файла F XML, который нельзя было сделать stati c, это не сработало.
Упрощенная версия контроллера и файла F XML, на который мне нужно сослаться из-за пределов класса, выглядит следующим образом:
public class MainAppController implements Initializable {
@FXML AnchorPane anchor;
@FXML AnchorPane window;
public static AnchorPane pane;
private boolean isPlay = false;
private boolean makeChanges = false;
public static MediaPlayer player;
PlayerUtils playerUtil = new PlayerUtils();
@FXML Slider volume, progressBar;
@FXML Label playTime, fullDuration;
String songFile;
Media songMedia;
Duration duration;
boolean updating = false;
//declaring the media player listener so that it can be removed and added
public InvalidationListener listener = new InvalidationListener()
{
public void invalidated(Observable ov) {
//if changes to the slider are being made then values will not be updated
//as it causes interference when trying to move the slider
if(makeChanges == false){
updateValues();
}
}
};
//this just plays or pauses depending
@FXML public void play_pause(){
play_pauseFunction();
}
//updates values of current time display (playTime) and updates the slider value
//called from the listener so constantly updating
protected void updateValues() {
//updates values of playTime and slider values
}
//THIS IS THE ONE I NEED TO ACCESS
//makes sure the player has no listeners before adding a new one
public void addPlayerListener(){
player.currentTimeProperty().removeListener(listener);
player.currentTimeProperty().addListener(listener);
}
@Override
public void initialize(URL url, ResourceBundle rb) {
}
}
Извините, если этот вопрос задан плохо, но я не смог Я не думаю о другом способе изложения.
Заранее спасибо за помощь
Поправка: Я бы хотел получить доступ к этому методу:
public void play_pauseFunction(){
if(isPlay == false){
//temp while playlists not working
if(player == null){
songFile = "E:\\Project\\Whupsh\\Songs\\Whenever, wherever - Shakira.mp3";
player = new MediaPlayer(PlayerUtils.getSongMedia(songFile));
progressBar.setDisable(false);
volume.setDisable(false);
duration = player.getMedia().getDuration();
}
player.play();
//adds listener to link with slider
addPlayerListener();
play_pause.getStyleClass().remove("play");
play_pause.getStyleClass().add("pause");
isPlay = true;
}
else{
player.pause();
play_pause.getStyleClass().remove("pause");
play_pause.getStyleClass().add("play");
isPlay = false;
}
}
Этот метод в том же классе, что и все другие методы