Обычная версия
Java форум JavaTalks
форум программистов

Поиск   Пользователи   Группы   Регистрация 
 Профиль   Личные сообщения 

 Вход 

Swt передача данных между формами
Список форумов
 ->  Swing, AWT & SWT


 
Начать новую тему 
Предыдущая тема :: Следующая тема  
Автор Сообщение
lukyanov : 2
Новичок

СообщениеЯнв 26, 2012 9:13 
Ответить с цитатой
Доброго времени суток уважаемые.
У меня никак не получается реализовать следующую вещь:
НА форме1 находится лейбл и кнопка, по нажатию на которой происходит открытие диалога в котором поле вводе и кнопка. как реализовать что бы по нажатию на кнопку в диалоге диалог закрывался а на форме1 менялся текст в соответствии с текстом из поля ввода диалога ?
К началу Посмотреть профиль Отправить личное сообщение
Evgin : 748
Постоянный посетитель
Откуда: (SPB)

СообщениеЯнв 26, 2012 9:19 
Ответить с цитатой
Лучше б написала по-пунктно что должно происходить =) не сразу понял =))))

Смотрите в сторону JFace Data Binding.
_________________
Велюровый Петон приветствует Вас :-*
----------------------------
Кроме того, я думаю, что Карфаген должен быть разрушен!!!
----------------------------
javax.swing.JDesktopPane <--- Печаль
----------------------------
НЕ ФЛУДИ, КОМРАД!
К началу Посмотреть профиль Отправить личное сообщение
barg : 263
Бывалый

СообщениеЯнв 26, 2012 9:23 
Ответить с цитатой
В методе (н-р, open()), который открывает диалог - делаем
Код:
return textField.getText()
и результат этого метода присваиваем какой-нить переменной в классе, открывающем диалог:
Код:
String s = new Dialog().open();
К началу Посмотреть профиль Отправить личное сообщение
lukyanov : 2
Новичок

СообщениеФев 03, 2012 7:18 
Ответить с цитатой
Большое спасибо.
К началу Посмотреть профиль Отправить личное сообщение
Evgin : 748
Постоянный посетитель
Откуда: (SPB)

СообщениеФев 03, 2012 11:21 
Ответить с цитатой
barg писал(а):
В методе (н-р, open()), который открывает диалог - делаем
Код:
return textField.getText()
и результат этого метода присваиваем какой-нить переменной в классе, открывающем диалог:
Код:
String s = new Dialog().open();


Ужасный совет. От Вас, barg, не ожидал такого. =(
Про существование org.eclipse.jface.dialogs.InputDialog не слышали? - посмотрите как оно написано.
а про правильное проектирование не слышали?!

Код:
String s = new Dialog().open();


За одно такое надо руки отрывать!!!

Открываем доку метода open(), который вы переопределить собираетесь и читаем:
Цитата:
Opens this window...
...
A window's return codes are window-specific, although two standard return codes are predefined: OK and CANCEL.

Returns:
the return code


Какую строку возвращать, ну вы чего?! Я как увидел ваш пример - аж поперхнулся.
_________________
Велюровый Петон приветствует Вас :-*
----------------------------
Кроме того, я думаю, что Карфаген должен быть разрушен!!!
----------------------------
javax.swing.JDesktopPane <--- Печаль
----------------------------
НЕ ФЛУДИ, КОМРАД!
К началу Посмотреть профиль Отправить личное сообщение
barg : 263
Бывалый

СообщениеФев 03, 2012 12:06 
Ответить с цитатой
Цитата:
Открываем доку метода open(), который вы переопределить собираетесь

Ни в коем случае не собирался его переопределять, просто неудачно его назвал.
Мне почему-то показалось, что автору нужно простое деревянное решение.
Сам я знакомство с java начинал именно с swt (кстати, вы Evgin частично принимали в этом участие подсказками на этом форуме), который то в принципе относительно прост, и помню - тяжеловато давались все прибамбасы JFace. Не думаю, что для передачи значения из textfild - a в label между диалогами нужно сразу отправлять в data binding - поправьте, если не прав.
К началу Посмотреть профиль Отправить личное сообщение
Evgin : 748
Постоянный посетитель
Откуда: (SPB)

СообщениеФев 03, 2012 12:36 
Ответить с цитатой
В databinding сразу надо отправлять после первого случая использования такого и подобного кода:
Код:

label = ne Label(shell, SWT.BORDER);
      text = new Text(shell, SWT.BORDER);
      text.addModifyListener(new ModifyListener() {
         @Override
         public void modifyText(ModifyEvent e) {
            label.setText(text.getText());
         }
      });


Вы не поверите, но многие считают это единственным верным решением, судя по тем проектам, в сорцах которых приходилось копаться.
Задача частая - решение предлагают именно такое. Один-два раза если встречается во всем проекте - нормально, а когда такой код повсеместно - это просто ахтунг.
Знать о таком решение надо, бесспорно, а применять не стоит. Это что касается биндинга.

Если open() - вы просто назвали неудачно, я беру свои слова про него обратно.

Но все-таки, согласитесь, что отделять надо - открытие окна диалога от получения введеного пользователем значения.
Если делать деревянное решение, моя версия:
Код:

String s = null;
InputDialog dialog = new InputDialog(shell, "", "", "", null);
if (Dialog.OK == dialog.open()) {
     s = dialog.getValue();
}

_________________
Велюровый Петон приветствует Вас :-*
----------------------------
Кроме того, я думаю, что Карфаген должен быть разрушен!!!
----------------------------
javax.swing.JDesktopPane <--- Печаль
----------------------------
НЕ ФЛУДИ, КОМРАД!
К началу Посмотреть профиль Отправить личное сообщение
barg : 263
Бывалый

СообщениеФев 03, 2012 15:47 
Ответить с цитатой
Цитата:
В databinding сразу надо отправлять после первого случая использования такого и подобного кода:
Код:

label = ne Label(shell, SWT.BORDER);
      text = new Text(shell, SWT.BORDER);
      text.addModifyListener(new ModifyListener() {
         @Override
         public void modifyText(ModifyEvent e) {
            label.setText(text.getText());
         }
      });

мда, решение оригинальное..
Соглашусь с тем, что первый мой ответ тут в такой интерпретации (а он имел право быть так понят) должен был вызвать возмущение как минимум.
К началу Посмотреть профиль Отправить личное сообщение
Arch : 9
Новичок

СообщениеФев 09, 2012 3:15 
Ответить с цитатой
Посоветуйте, что почитать или где прочитать, чтоб сделать не деревянное решение? Или где можно посмотреть код хорошей реализации этой проблемы?
К началу Посмотреть профиль Отправить личное сообщение
NektoDev : 14
Новичок

СообщениеФев 09, 2012 9:32 
Ответить с цитатой
Evgin писал(а):

Если делать деревянное решение, моя версия:

А как можно сделать красиво? В каком разделе SWT про это можно прочитать, а то я везде так делал =)
К началу Посмотреть профиль Отправить личное сообщение
Evgin : 748
Постоянный посетитель
Откуда: (SPB)

СообщениеФев 09, 2012 10:13 
Ответить с цитатой
NektoDev писал(а):
Evgin писал(а):

Если делать деревянное решение, моя версия:

А как можно сделать красиво? В каком разделе SWT про это можно прочитать, а то я везде так делал =)


Гуглите "JFace Data Binding", отправная точка - vogella.de и wiki.eclipse.org/JFace_Data_Binding и ibm.com/developerworks/opensource/library/os-ecl-jfacedb1
_________________
Велюровый Петон приветствует Вас :-*
----------------------------
Кроме того, я думаю, что Карфаген должен быть разрушен!!!
----------------------------
javax.swing.JDesktopPane <--- Печаль
----------------------------
НЕ ФЛУДИ, КОМРАД!
К началу Посмотреть профиль Отправить личное сообщение
NektoDev : 14
Новичок

СообщениеФев 09, 2012 11:10 
Ответить с цитатой
Спасибо, буду исправляться =)
К началу Посмотреть профиль Отправить личное сообщение
 
Начать новую тему  Ответить на тему
Страница 1 из 1
Список форумов
 -> Swing, AWT & SWT


 
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Java and all Java-related trademarks and logos are trademarks or registered trademarks of Oracle Corporation in the United States and other countries.
Это сайт не относится к фирме Oracle Corporation и не поддерживается ею.

© 2006-2010 www.javatalks.ru: форум java программистов
Используется скрипт phpBB © 2001, 2010 phpBB Group

Хостинг от bizname.ru