如何在JavaFX中的不同控制器类中设置TableView的项目?

时间:2015-08-05 16:09:36

标签: java javafx tabs tableview

我有两个带有两个控制器类MainController和PlaylistController的fxml文件。每个类分别有一​​个TableView,tablenTable

table显示为TabPane

上的默认标签

nTable适用于使用按钮创建的新标签页。

我想要的是能够在默认表格中选择项目,并在单个操作中将它们添加到新选项卡上的新表格中(我可以使用两个按钮执行此操作,其中一个按钮在新选项卡后单击被建造)。

我猜我需要确保程序在设置项目之前等待创建新标签,但我不知道该怎么做。

这是我使用的方法:

@FXML
PlaylistController pc;    

public static ObservableList<Track> newTracklist = FXCollections.observableArrayList();

public void addToNewPlaylist(){
    newTracklist.clear();
    newTracklist.addAll(table.getSelectionModel().getSelectedItems());

    Tab nTab = new Tab();

    FXMLLoader nLoader = new FXMLLoader(getClass().getResource("/fxml/fxPlaylist.fxml"));
    try {
        Parent nRoot = nLoader.load();
        nTab.setContent(nRoot);     
    } catch (IOException e) {
        e.printStackTrace();
    }
    tabPane.getTabs().add(nTab);
    nTab.isClosable();
    pc.nTable.setItems(newTracklist);
}

1 个答案:

答案 0 :(得分:0)

除非您定义常量或类似内容,否则self字段在控制器中没有位置。

static中定义一个方法,以便在其表格中显示PlaylistController列表:

Track

然后在加载FXML时调用它:

public class PlaylistController {

    @FXML
    private TableView<Track> nTable ;

    // ...

    public void setTracks(List<Track> tracks) {
        nTable.getItems().setAll(tracks);
    }

    // ...
}