Хобрук: Ваш путь к мастерству в программировании

JavaFX: привязать StringProperty с постоянным префиксом строки

У меня вопрос к функциональности привязки в JavaFX. Я хочу связать 2 строковых свойства. Но их значения не должны быть равны.

Сделаем мне пример:

У меня есть StringProperty, представляющий последний открытый проект в моем приложении.
Значение похоже на "C:\temp\myProject.prj".
Я хочу показать этот путь в заголовке моего окна.
> Это просто: stage.titleProperty().bind(lastprojectProperty());
Но я хочу показывать не только путь к проекту, но и имя приложения,
например: MyApplication 2.2.4 - C:\temp\myProject.prj.

Можно ли использовать привязку и добавить постоянную строку префикса? Или мне нужно использовать ChangeListerner?

Решение с ChangeListener имеет проблему с начальными значениями...

    final StringProperty path = new SimpleStringProperty("untitled");
    final StringProperty title = new SimpleStringProperty("App 2.0.0");

    path.addListener(new ChangeListener<String>()
  {
        @Override
        public void changed(ObservableValue<? extends String> ov, String t, String newValue)   
        {
            title.setValue("App 2.0.0 - " + newValue);
        }
  });                

    // My title shows "App 2.0.0" since there is now change event throws until now...
    // Of course I could call path.setValue("untitled"); 
    // And above path = new SimpleStringProperty("");
    System.out.println(title.getValue());

    // Now the title is correct: "App 2.0.0 - C:\temp\myProject.prj"
    path.setValue("C:\\temp\\myProject.prj");
    System.out.println(title.getValue());

Ответы:


1

Если вы сделаете что-то подобное

StringProperty prop = new SimpleStringProperty();
StringProperty other = new SimpleStringProperty();

prop.bind(Bindings.concat("your prefix").concat(other));

ваше свойство будет связано с префиксом, который вы хотите

25.06.2013
  • agonist_ большое спасибо! Ты замечательный! Это именно то, что я хотел!!! Оно работает! Гораздо проще без ChangeListener. 25.06.2013
  • Нет проблем, привязки JavaFX действительно мощные, вы можете делать все, что хотите. 25.06.2013
  • Bindings.concat имеет переменные. Так что вы просто могли бы сделать: prop.bind(Bindings.concat("your prefix", other)); 19.05.2021
  • Новые материалы

    Введение в контекст React
    В этом посте мы поговорим о Context API, который был представлен в React 16, и о том, как вы можете их использовать. Что такое контекст? Глядя на определение из react docs , оно..

    Шлюз с лицензией OSS, совместимый с Apollo Federation v2, появится в WunderGraph
    Сегодня мы рады сообщить, что мы сотрудничаем с поддерживаемой YC Tailor Technologies, Inc. для внедрения Apollo Federation v2. Реализация будет лицензирована MIT (Engine) и Apache 2.0..

    Это оно
    Ну, я официально уволился с работы! На этой неделе я буду лихорадочно выполнять последние требования Думающего , чтобы я мог сосредоточиться на поиске работы. Что именно это значит?..

    7 полезных библиотек JavaScript, которые вы должны использовать в своем следующем проекте
    Усильте свою разработку JavaScript Есть поговорка «Не нужно изобретать велосипед». Библиотеки — лучший тому пример. Это поможет вам написать сложные и трудоемкие функции простым способом...

    Базовое руководство по переносу концепций обучения в глубокое обучение
    Обзор По мере того, как машинное обучение становится все более мощным и продвинутым, модели, обеспечивающие эту расширенную возможность, становятся все больше и начинают требовать огромного..

    C в C.R.U.D с использованием React-Redux
    Если вы использовали React, возможно, вы знакомы с головной болью, связанной с обратным потоком данных. Передача состояния реквизитам от родительских компонентов к дочерним компонентам может..

    5 обязательных элементов современного инструмента конвейера данных
    В цифровом мире предприятия используют конвейеры данных для перемещения, преобразования и хранения огромных объемов данных. Эти конвейеры составляют основу бизнес-аналитики и играют..