Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разъясните код с SWT 
:(
    Опции темы
zhz
Дата 24.2.2012, 02:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 31.10.2006
Где: Petropavlovsk-Kam chatsky

Репутация: нет
Всего: 2



Может, кто то посчитает, что тему следовало создать в "Общем" разделе, но все таки тут про ГУИ)). Вообщем такой код:
Код

        Display display = new Display();
        Shell shell = new Shell(display);
        GridLayout layout = new GridLayout(2, false);
        // set the layout of the shell
        shell.setLayout(layout);
        // Create a label and a button
        Label label = new Label(shell, SWT.NONE);
        label.setText("A lable");
        Button button = new Button(shell, SWT.PUSH);
        button.setText("Press Me");
        
        // Create a new label that will spam two columns
        label = new Label(shell, SWT.BORDER);
        label.setText("This is a label");
        // Create new layout data
        GridData data = new GridData(GridData.FILL, GridData.BEGINNING, true,
                false, 2, 1);
        label.setLayoutData(data);
        
        // Create a new label which is used as a separator
        label = new Label(shell, SWT.SEPARATOR | SWT.HORIZONTAL);
        // Create new layout data
        data = new GridData(GridData.FILL, GridData.BEGINNING, true,
                false, 2, 1);
        data.horizontalSpan=2;
        label.setLayoutData(data);


Мне непонятно, зачем автор объявив один раз переменную (Label label), в дальнейшем для создания собственно, нескольких контроллов Label использует ОДНУ, ранее объявленную переменную? т.Е
Код

Label label = new Label(shell, SWT.NONE);
label.setText("Это первый лейбел");
//Нужен еще один label, создаем его из уже имеющейся переменной
label = new Label(shell, SWT.BORDER);
label.setText("Это еще один лейбел!");


В чем здесь логика? Зачем так делают? Правильно ли это? Получается ведь, что к первому лейбелу уже никак не обратится?!

Ps Взглянул еще раз на код, и обратил внимание, что автор проделывает данный трюк только с лейбелами, для кнопок, например, каждый раз объявляет  новую переменную, видимо label в дальнейшем не используется, поэтому и одна переменная на весь интерфейс. Тем не менее, как вообще программа работает? Ведь вызывая конструктор для уже созданного контрола, он сначала уничтожается? или нет? почему тогда в окне существуют несколько лейбелов, при том что это одна переменная?!


Это сообщение отредактировал(а) zhz - 24.2.2012, 03:14
PM MAIL ICQ   Вверх
Skynin
Дата 24.2.2012, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 1.7.2007
Где: Харьков

Репутация: нет
Всего: 10



Значит автору и не нужно далее обращаться к этим объектам.
А ссылки на них сохраняется в shell.
Причем если очень нужно - то можно оттуда их опять достать.

Цитата

Ведь вызывая конструктор для уже созданного контрола, он сначала уничтожается?

Никак нет.
Объект в Java удаляется сборщиком мусора, когда на него нет ссылок (или ссылки хранятся в других объектах подлежащих удалению)

Цитата
при том что это одна переменная?!

Переменная хранит ссылку. То есть указатель на область памяти в которой лежат данные объекта.
Эту ссылку можно многократно копировать в другие переменные или поля других объектов, коллекции и т.д.
Переменная никак не отвечает - ни за область памяти, ни за само значение ссылки.

PM MAIL WWW ICQ Skype GTalk YIM MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0649 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.