2016-12-27 4 views
0

У меня есть вопрос относительно TabContent. Так я создаю вкладки динамически, как это:Доступ к вкладке TabContent и его содержимое JavaFX

private Tab addNewTab(final TabPane tabPane, String newTabName, Node newTabContent, boolean isCloseable) { 
    Tab newTab = new Tab(newTabName); 
    newTab.setContent(newTabContent); 
    newTab.setClosable(isCloseable); 

    newTab.setOnClosed(new EventHandler<Event>() { 
     @Override 
     public void handle(Event event) { 
      if (tabPane.getTabs() 
        .size() == 2) { 
       event.consume(); 
      } 
     } 
    }); 

    tabPane.getTabs().add(newTab); 
    return newTab; 

} 

И мой вопрос будет, как я могу получить доступ к newTabContent Node. я пытался что-то вроде этого:

object.getTabPane().getTabs().get(0).getContent() 

Но это не вернет мне узел со всеми его атрибутами.

Например, если Узел является другим объектом, я не могу получить доступ к его атрибутам (кнопкам, полям и т. Д.). Я хотел бы сделать что-то вроде этого:

object.getTabPane().getTabs().get(0).getContent().getMyTextField().getText(); 

При необходимости я могу предоставить дополнительную информацию.

Заранее благодарен!

+2

«Но это не возвращает узел». Я уверен, что так оно и есть. Что вы имеете в виду? –

ответ

1

Логика язычка должна содержать весь макет и внутри этой схемы вы можете получить узел вы хотите, но для примера TextField:

//Here return the TextField 
TextField tf = (TextField) tab.getContent(); 

Лично я бы хранить мой Tabs в List<Tab> , с макетом (Pane) в качестве контента для моего другого Nodes. По моему скромному мнению, я думаю, что так легче!

//Create dynamic tabs 
List<Tab> tabs = new ArrayList<>(); 
Pane pane = new Pane(); 
TextField tf = new TextField("Hi"); 
pane.getChildren.add(tf); 
tabs.add(addNewTab(tabPane, "Test", pane, true)); 

Примечание: Это не означает, что вкладка не может содержать другие узлы!

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