JavaFX. Как получить элемент по нажатию

349
27 сентября 2017, 09:02

Есть TabPane, в нем создаются Tab, в Tab помещается TextArea. Есть Button, который что-то должен делать с открытым TextArea в Tab. Как мне получить этот TextArea?

Думал отслеживать нажатие на элемент (не понял), или когда в фокусе становится элемент(пробовал, получалось отловить все кроме TextArea и TextField(это я к примеру)).

Привожу код метода создания Табов (Хотя вряд ли он нужен).

@Override
public boolean addTabOnView(TabPane tabPane, File file) {
    Tab tab = new Tab(file.getName());
    AnchorPane anchorPane = new AnchorPane();
    TextArea textArea = null;
    try {
        textArea = new TextArea(readFile(file));
    } catch (IOException e) {
        e.printStackTrace();
        return false;
    }

    AnchorPane.setBottomAnchor(textArea, 0.0);
    AnchorPane.setTopAnchor(textArea, 0.0);
    AnchorPane.setLeftAnchor(textArea, 0.0);
    AnchorPane.setRightAnchor(textArea, 0.0);
    anchorPane.getChildren().add(textArea);
    tab.setContent(anchorPane);
    tabPane.getTabs().add(tab);
    return true;
}
ArrayList<String> stringArrayList = new ArrayList<String>();
String readFile(File file) throws IOException {
    Files.lines(file.toPath(), StandardCharsets.UTF_8).forEach(a -> stringArrayList.add(a));
    String string = "";
    for (String str:stringArrayList) {
        string += str;
        string += "\n";
    }
    return string;
}
Answer 1

При условии, что наполнение таба контентом в методе addTabOnView не изменится, то:

Tab tab = tabPane.getTabs().filtered( Tab::isSelected ).get( 0 );
//или
Tab tab = tabPane.getTabs().stream().filter( Tab::isSelected ).findFirst().get();
TextArea area = (TextArea)((Parent)tab.getContent()).getChildrenUnmodifiable().get( 0 );   
Answer 2

Пусть addTabOnView(TabPane tabPane, File file) возвращает значение созданного textArea = new TextArea(readFile(file)); и всего делов.

Либо просто из таба забирать как то так: tab.getContent().getChildren().get(0);

READ ALSO
Почему не инкрементируются значения?

Почему не инкрементируются значения?

Как я понял, создается 4 нити, и каждая из них должна увеличивать на 1 каждый элемент массива valuesНо этого не происходит

249
Выводит на экран по 2 раза System.out.println(&#39;&#39;&#39;)

Выводит на экран по 2 раза System.out.println(''')

Такая ситуация - внутри метода вызываю Systemout

223
Как получить число прописью на разных языках (рус., англ., укр. и прочие)? [требует правки]

Как получить число прописью на разных языках (рус., англ., укр. и прочие)? [требует правки]

Как на java в цикле от 0 до 1000 напечатать четные числа прописью? Есть ли где то готовое решение для получения числа прописью?

165