Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > как пользоваться bind для пропертей Swing comp.?


Автор: Sleepy_PIP 20.8.2010, 13:34
Если у кого есть - дайте живой пример как использовать bind для компонент Swing в NetBeans.
Конкретнее - что и как надо сделать для того чтоб свойство text у jTextField можно было синхронизовать с какой-то скажем переменной другого класса с исвользованием имеющихся у NetBeans возможностей.
Пока пытаюсь как рассказано в http://unr303.blogspot.com/2009/01/backupsplitter-beans-binding-and-swing.html но ничего не получатся -  вообще get/set-теры даже не вызываются ....
Или хоть к толковой статъе сошлите, то что нашел - либо к другому компоненту биндится либо к entity .... а надо просто к переменной друго класса ... никак не разберусь как механизм должен работать.
Спасибо!

Автор: Sleepy_PIP 20.8.2010, 14:42
извините. спасибо. кажется начал понимать. спасиюо. извините.

Автор: jk1 20.8.2010, 18:09
Цитата

кажется начал понимать.


Тогда поделитесь с коллегами рецептом smile 

Автор: Sleepy_PIP 20.8.2010, 18:32
Цитата(jk1 @ 20.8.2010,  18:09)
Цитата

кажется начал понимать.


Тогда поделитесь с коллегами рецептом smile

хм. не той квалификации я . но все что раскопал:
делаем класс
Код

public class TestData
{

    public String var1;

    /**
     * Get the value of var1
     *
     * @return the value of var1
     */
    public String getVar1()
    {
        return var1+"!!";
    }

    /**
     * Set the value of var1
     *
     * @param var1 new value of var1
     */
    public void setVar1(String var1)
    {
        this.var1 = var1;
        System.out.println("var1:"+var1);
    }
....
}


строим оконо
Код

public class MainWnd extends javax.swing.JFrame
{

    TestData testdata=new TestData();

    public TestData getTestdata()
    {
        return testdata;
    }

    public void setTestdata(TestData testdata)
    {
        this.testdata = testdata;
    }

    HashMap<String,UIDriverListener> listenerMap;
    GlobalConfigData gcd=GlobalConfig.getGlobalConfigData();

    /** Creates new form MainWnd */
    public MainWnd(HashMap<String,UIDriverListener> listeners)
    {
.....
/* not modify
....
        org.jdesktop.beansbinding.Binding binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, this, org.jdesktop.beansbinding.ELProperty.create("${testdata.var1}"), jTextField1, org.jdesktop.beansbinding.BeanProperty.create("text"));
        binding.setSourceNullValue(null);
        binding.setSourceUnreadableValue(null);
        bindingGroup.addBinding(binding);
....
*/
}


что указано в комментариях генерит сам нетбинс если мы строим окно с кодогенерацией а не сериализацией.
этот участок кода соответствует следующим установкам через интерфейс дезигнера:
user posted image
вторая закладка:
user posted image

и все нормально работает. тоесть TestData.var1 вполне себе меняется при вводе в текстовое поле на лету.
Только одно НО! - не смотря на все вариации установок сделать так что-б содержимое JTextField.text менялось в зависимости от того что возвращает getVar1 мне не удалось. точнее JTextField.text меняет свое содержимое при первом вызове getVar1 , но не смотря на исправные вызовы getVar1 при последующей работе (при каждом изменении text в процессе ввода данных с клавиатуры при
org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE) содержимое JTextField.text остается ровно то что вводится с клавиатуры а не то что возвращает getVar1 (еще раз - вариации полем Update mode НЕ помогают в данном случае, хотя этот параметр корректно отрабатывается).

ну конечно я как-бы сказал бы что наверное нашел один из вариантов - но по нему ясна общая картинка и можно дальше уже усложнаять ...

такие дела. мне пока достаточно для моих целей. пойду изучать как запретить ввод не цифр в JTextField .... (блин, ну не могли сразу формат позволить задавать, да? :( ... а отдельных форматных полей ввода нет конечно-ж :( ) ....

Добавлено через 1 минуту и 45 секунд
извините.
return var1+"!!"; в первом классе (TestData) читать конечно как var1 smile. Это я уже эксперементировал далее ....

Автор: dorogoyIV 21.8.2010, 00:39
Цитата(Sleepy_PIP @  20.8.2010,  18:32 Найти цитируемый пост)
блин, ну не могли сразу формат позволить задавать, да?

вот нахалы!!! могли бы и прогу эту за тебя написать  smile 

Автор: Sleepy_PIP 21.8.2010, 06:13
судя по работе JMenu и форматному текстовому полю - эти "нахалы" тааакого понапишут , что уж лучше я сам smile

интересно а есть ли альтернативы swing-у? ... че-то пока не нахожу ... :(.

Автор: jk1 21.8.2010, 13:26
Цитата

интересно а есть ли альтернативы swing-у?

Есть, посмотрите в сторону JavaFX и SWT.
Цитата

судя по работе JMenu

Не путайте возможности GUI-построителя Matisse из NetBeans и возможности Swing. Я уже не говорю о том, что вы пытались добиться функционала кнопки (событие при нажатии) от компонента "Меню". Мне такое требование кажется немного странным. Да и пользователю будет откровенно непривычно работать с кнопками на строке меню. Не стоит ругать лопату за то, что она плохо забивает гвозди.
Цитата

и форматному текстовому полю

Код

 JFormattedTextField field = new JFormattedTextField(new NumberFormatter());

вот собственно запрет ввода не цифр, не вижу повода ругаться на API

Ну, и наконец прошу Вас соблюдать правила форума: Один вопрос - одна тема.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)