2015-08-05 2 views
0

У меня есть два файла fxml с двумя классами контроллера MainController и PlaylistController. Каждый класс имеет TableView, table и nTable соответственно.Как установить элементы TableView в другом классе контроллера в JavaFX?

table отображается в виде вкладки по умолчанию на TabPane

nTable aplies в новой вкладке, созданной с помощью кнопки.

Я хочу, чтобы иметь возможность выбирать элементы в таблице по умолчанию и добавлять их в новую таблицу на новой вкладке в одном действии (я могу сделать это с помощью двух кнопок, один из которых будет нажат после нового вкладка).

Я предполагаю, что мне нужно убедиться, что программа ждет, пока новая вкладка будет создана до установки элементов, но я не знаю, как это сделать.

Это метод я использую:

@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); 
} 

ответ

0

Если вы не определяете константу, или что-то подобное, static поля не имеют места в контроллере.

Определите метод в вашем PlaylistController взять список Track с для отображения в таблице:

public class PlaylistController { 

    @FXML 
    private TableView<Track> nTable ; 

    // ... 

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

    // ... 
} 

Тогда просто вызовите его при загрузке FXML:

public void addToNewPlaylist(){ 

    Tab nTab = new Tab(); 

    FXMLLoader nLoader = new FXMLLoader(getClass().getResource("/fxml/fxPlaylist.fxml")); 
    try { 
     Parent nRoot = nLoader.load(); 
     PlaylistController controller = nLoader.getController(); 
     controller.setTracks(table.getSelectionModel().getSelectedItems()); 
     nTab.setContent(nRoot);  
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    tabPane.getTabs().add(nTab); 
} 
+0

Спасибо, решена Это :) – Peralta

Смежные вопросы