2015-02-19 4 views
0

UI Control, такой как LISTVIEW или Tree или ... поставляется с наблюдаемой моделью.JAVAFX8 Обновление моделей управления?

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

Однако мой вопрос здесь заключается в следующем:

Является ли это намерение образом, что кто-то, кто хочет обновить и не заменить эту модель, сделать это в фоновом потоке с platform.runlater.

Другими словами, у вас есть серьезные вычисления, и в результате вам необходимо обновить ObservableList. Является ли это намеченным способом, чтобы выполнить тяжелую работу в фоновом потоке и, в конце концов, запустить обновление в платформе позже?

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

http://docs.oracle.com/javase/8/javafx/api/javafx/concurrent/Task.html

кажется, что какой-то другой механизм должен быть использован. Лучше всего вернуть полный список вместо обновления наблюдаемого списка.

Но это работает только в том случае, если что-то происходит из графического интерфейса. В случае, если обновление запускается с задней стороны, нет никакого способа сделать это.

Решение, которое я использовал до сих пор, всегда содержало ссылку на наблюдаемый список и обновлял его с помощью платформы. Runlater.

Есть ли другой способ?

Большое спасибо,

M

ответ

1

Ссылку вы даете есть пример (PartialResultsTask), что делает, как вы описываете: он обновляет существующий ObservableList, как она прогрессирует через вызов Platform.runLater(). Так что это явно поддерживаемый способ делать что-то.

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

+0

До сих пор для обновления с задней стороны у меня никогда не было проблем. Я просто warp obersableList в том, что я называю службой для этого объекта, и которые предоставляют метод, который вызывает платформу runlater. Хотя этот класс обслуживания предоставляет пакетный метод, например addAll, во избежание создания слишком большого количества runnables. Я проверю ваш пример – MaatDeamon

+0

О, я вижу, это немного более сложное спасибо. Много хорошей идеи. В этом отношении я, хотя больше склонен использовать актеров. Несколько месяцев назад я спросил здесь, как интегрировать Akka и Javafx2. Решение становится проще после установки – MaatDeamon

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