我不是 100% 确定如何最好地描述这个问题,但我会尽力而为。
我正在开发一个音乐应用程序,并且在一个应用程序中有不同的窗口,并将窗格加载到如下所示的应用程序窗口中:

从绿色按钮变为播放列表屏幕的位是加载了 FXML 文件的窗口。
我最近创建了应用程序的一部分,它通过应用程序的这个小窗口中的按钮播放歌曲,但媒体播放器位于主应用程序控制器中,并且需要在这里,因为它会更新底部两个滑块的值。
我已经看到了一些关于引用我用于主应用程序的控制器的确切实例的信息,但我不确定如何执行此操作。我尝试创建 mainAppController 的静态版本,但这是一个单独的实例,因此没有正确引用。
我需要参考的唯一方法是 addPlayerListener 方法。我试图将其设为静态,但因为它处理了无法设为静态的 FXML 文件中的滑块等,所以这不起作用。
我需要从类外部引用的控制器和 FXML 文件的简化版本如下所示:
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;
}
}
此方法与所有其他方法在同一个类中
