2015-04-27 2 views
-4

Мне нужно создать привязку, которая позволяет мне делать эквивалент String.replaceAll(...), но с привязками. У меня есть строка «$ {driver}, управляющая $ {name}», и я хочу, чтобы ключи, «$ {driver}» и т. Д. Заменялись определенным свойством. Я также хочу, чтобы возвращаемое свойство могло добавлять слушателей, поэтому, когда driverProperty или другие изменения, возвращаемое значение свойства изменится без повторного вызова getString().Необходимость привязки эквивалента String.replaceAll (...)

public String getString(Derby derby) { 
     String ret; 
     if (driverProperty.get().equals("") && nameProperty.get().equals("") && numberProperty.get().equals("") && groupProperty.get().equals("")) { 
      ret = "[blank]"; 
     } else { 
      ret = (String) derby.getSettings().get("general.cardisplay").getValue(); 
      ret = ret.replace("${driver}", driverProperty.get()); 
      ret = ret.replace("${name}", nameProperty.get()); 
      ret = ret.replace("${number}", numberProperty.get()); 
      ret = ret.replace("${group}", groupProperty.get()); 
     } 
     return ret; 
    } 
+2

Так ? пожалуйста, что вы пробовали? –

+0

Ну, я посмотрел на Javadocs и не смог найти ничего, кроме concat(), который, я уверен, просто добавляет строки вместе. Я думаю, что может быть что-то, что я могу сделать с созданием пользовательских привязок, но я не уверен, с чего начать. –

+2

Можете ли вы хотя бы показать небольшой контекст? Неясно, что вы имеете в виду. Если у вас есть 'StringProperty', вы можете просто установить его на новое значение, например ... –

ответ

1

Bindings.createStringBinding(). Для этого требуется функция, подающая String и список значений для наблюдения; если какое-либо из этих значений изменится, привязка отмечена как недействительная.

Ваш вопрос не слишком ясно для меня, но я думаю, что вы можете сделать что-то вроде

StringBinding formattedString = Bindings.createStringBinding(
    () -> getString(derby), 
    derby.settingsProperty(), 
    nameProperty, numberProperty, 
    driverProperty, groupProperty); 

Теперь вы можете делать такие вещи, как

formattedString.addListener((obs, oldFormattedString, newFormattedString) -> { 
    // invoked any time the formatted string changes... 
}); 

или

Label label = new Label(); 
label.textProperty().bind(formattedString); 
+0

Спасибо, именно то, что я искал! –

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