【问题标题】:ObservableList will not display on TableView because of "Duplicate TableColumns" (JAVAFX)由于“重复的 TableColumns”(JAVAFX),ObservableList 不会显示在 TableView 上
【发布时间】:2019-01-12 15:14:03
【问题描述】:

我正在尝试将 ObservableList 中的数据显示到我在 SceneBuilder 中创建的 TableView 中。 TableView 包含三个 TableColumn。我给它们的名称与 FXML 文件中的名称完全相同。

我已经将它们导入到控制器中,就像您在下面看到的一样 [1]

然后我尝试运行我的代码。我基本上有一首歌。这首歌由标题、艺术家和专辑组成。我想在每一列上显示它,但它一直在抱怨:

在 TableView 列列表中检测到重复的 TableColumns,标题为“歌曲标题”、“艺术家”、“专辑”。

然后崩溃。

有人知道我做错了什么吗?

@FXML
private TableView<Song> defaultTableView;

// 1) Song Title

@FXML
private TableColumn songTitleColumn;

// 2) Song artist

@FXML
private TableColumn songArtistColumn;

// 3) Song album
@FXML
private TableColumn songAlbumColumn;


public void initialize(URL location, ResourceBundle resources) {


    Song song1 = new Song("a lot.mp3");

    Song song2 = new Song("Work Out.mp3");

    Song song3 = new Song("Jesus Walks.mp3");

    Playlist myPlaylist = new Playlist("My awesome playlist");

    myPlaylist.addSong(song1);

    myPlaylist.addSong(song2);

    song1.getSongTitleFromDB();

    song1.getSongArtistFromDB();

    song1.getSongAlbumFromDB();

    myPlaylist.displayAllSongs(defaultTableView,songTitleColumn,songArtistColumn,songAlbumColumn);

    ObservableList<Song> songs = FXCollections.observableArrayList();

    songs.add(song1);

    songTitleColumn.setCellFactory(new PropertyValueFactory<Song,String>("songTitle"));

    songArtistColumn.setCellFactory(new PropertyValueFactory<Song, String>("songArtist"));

    songAlbumColumn.setCellFactory(new PropertyValueFactory<Song, String>("songAlbum"));


    defaultTableView.setItems(songs);

    defaultTableView.getColumns().addAll(songTitleColumn,songArtistColumn,songAlbumColumn);

【问题讨论】:

    标签: java javafx tableview fxml


    【解决方案1】:

    您的 fxml 文件如下所示:

    <TableView fx:id="defaultTableView">
        <columns>
            <TableColumn fx:id="songTitleColumn"/>
            <TableColumn fx:id="songArtistColumn"/>
            <TableColumn fx:id="songAlbumColumn"/>
        </columns>
    </TableView>
    

    由于columns 是只读列表属性,加载fxml 文件会导致将列添加到TableView。尝试再次将它们添加到 TableView 会导致异常。

    您在initialize 方法中执行此操作:

    defaultTableView.getColumns().addAll(songTitleColumn, songArtistColumn, songAlbumColumn);
    

    您需要删除此链接或在initialize 方法中创建所有列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多