gpt4 book ai didi

java - 当另一个组合框的值更改时,如何更改组合框的项目?

转载 作者:行者123 更新时间:2023-12-02 01:26:59 25 4
gpt4 key购买 nike

我正在做一个操作歌手专辑的小项目,因此该项目为您提供添加新歌手以添加特定歌手的专辑以及将歌曲添加到特定歌手的特定专辑中,我试图让用户有机会获得歌手专辑,这样他就不必用手输入,所以我使用了两个组合框,其中一个名为“AvailableSinger”,明确表示可用歌手,另一个“AlbumAvailable”表示可用专辑每个歌手,当用户选择歌手时,“AlbumAvailable”将显示“AvailableSinger”中选择的歌手的专辑

我添加了两位艺术家“Adele”和“Eminem”,但是当我选择 Eminem 时,只会显示“Adele”的“Hello”专辑。

package sample;

import MusicManiPulation.Album;
import MusicManiPulation.Singer;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;

import java.util.ArrayList;

public class AddSongsToAlbum {

@FXML
ComboBox<String> AvailableSinger ;
@FXML
ComboBox<Album> AlbumAvailble ;

public void initialize(){
AvailableSinger.getItems().addAll(Singer.getInstance().GetSingerNames());
AvailableSinger.getSelectionModel().selectFirst();
ArrayList<Album> AlbumList =Singer.getInstance().getAlbumNameoforSinger(AvailableSinger.getSelectionModel().getSelectedItem());
AlbumAvailble.getItems().addAll(AlbumList);

}


}

歌手类(如果你想了解我在做什么)

package MusicManiPulation;

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

public class Singer {

public static Singer Instance = new Singer();

Map<String , ArrayList<Album>>AlbumListfoEachSinger ;

private Singer() {
this.AlbumListfoEachSinger = new HashMap<>();
}

public ArrayList<String> GetSingerNames(){
ArrayList<String>SingerName = new ArrayList<>();
SingerName.addAll(AlbumListfoEachSinger.keySet());
return SingerName;
}


public Map<String, ArrayList<Album>> getAlbumListfoEachSinger() {
return AlbumListfoEachSinger;
}


public ArrayList<Album> getAlbumNameoforSinger(String SingerName){
return AlbumListfoEachSinger.get(SingerName);
}

public static Singer getInstance() {
return Instance;
}
}

Adele Album Displaying Picture

When Selecting Eminem

因为您只能看到阿黛尔专辑显示,但当选择其他艺术家时,它不起作用。

最佳答案

首先,你必须更加注意Java中的命名约定。检查这个resource .

您可以使用以下方法之一解决您的问题:

  • 听众:

监听器可以添加到JavaFX属性中,您可以添加一个监听器,当选择新歌手时,该监听器将填充特定歌手的专辑。在初始化方法中添加此监听器:

availableSingers.valueProperty().addListener((observable, oldSelectedSinger, newSelectedSinger) -> {
List<Album> albums = Singer.getInstance().getAlbumNameoforSinger(newSelectedSinger);
availableAlbums.getItems().setAll(albums);
});
  • 绑定(bind):

您可以将专辑组合框的项目绑定(bind)到歌手组合框的选定值。在初始化方法中添加此监听器:

availableAlbums.itemsProperty().bind(Bindings.createObjectBinding(() -> {
List<Album> albums = Singer.getInstance().getAlbumNameoforSinger(availableSingers.getValue());
return FXCollections.observableArrayList(albums);
}, availableSingers.valueProperty()));

关于java - 当另一个组合框的值更改时,如何更改组合框的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56762272/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com