Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Объясните простой пример со Swing / 8 сообщений из 8, страница 1 из 1
20.07.2015, 10:39
    #39011043
Cpt. Gray
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните простой пример со Swing
Доброго времени,

Обычное ГУИ приложение:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
import java.awt.EventQueue;
import javax.swing.JFrame;

public class SimpleEx extends JFrame {

    public SimpleEx() {

        initUI();
    }

    private void initUI() {
        
        setTitle("Simple example");
        setSize(300, 200);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    public static void main(String[] args) {

        EventQueue.invokeLater(new Runnable() {
        
            @Override
            public void run() {
                SimpleEx ex = new SimpleEx();
                [color=red]ex.setVisible(true);[/color]
            }
        });
    }
}



Почему ex.setVisible(true); находится в методе run()
Если setVisible(true); можно поставить после setDefaultCloseOperation(EXIT_ON_CLOSE); в методе initUI() ?

Почти во всех пример такое встречаю, не могу понять зачем так делают
...
Рейтинг: 0 / 0
20.07.2015, 10:56
    #39011064
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните простой пример со Swing
Cpt. Gray,
imho
показываться или не показываться на экране прерогатива того кто создаёт объект. А не самого себя в конструкторе.
По ООП.
...
Рейтинг: 0 / 0
20.07.2015, 11:06
    #39011077
Cpt. Gray
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните простой пример со Swing
Petro123Cpt. Gray,
imho
показываться или не показываться на экране прерогатива того кто создаёт объект. А не самого себя в конструкторе.
По ООП.
Можете поподробнее?
"Видимость" это же атрибут самого фрейма, почему бы тогда не устанавливать его вместе с остальными атрибутами (заголовком и размерами и тд) в конструкторе?

Как правильно делать, чтобы все было по фэн-шую? Так как в примере?
Или же еще в других примерах видел, что в методе run() перед ex.setVisible(true); ставят ex.setDefaultCloseOperation(EXIT_ON_CLOSE); ?
...
Рейтинг: 0 / 0
20.07.2015, 11:21
    #39011097
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните простой пример со Swing
Cpt. GrayМожете поподробнее?
"Видимость" это же атрибут самого фрейма, почему бы тогда не устанавливать его вместе с остальными атрибутами (заголовком и размерами и тд) в конструкторе?

1) Это не критично на простейшем примере.
2) Если запхать setVisible(true) в конструктор, то код, который использует этот фрейм не сможет создать объект, поменять состояние объекта и только затем показать окно. Таким образом вы бы лишили клиентский код гибкости. И в случае острой надобности так сделать, пришлось бы переписывать готовый класс SimpleEx
3) Рантайм всегда хорошо разбивать на фазы и методы. И если рассмотреть жизненый цикл окна внимательно, то мы получим следующее.
- Создать объект
- Создать структуру UI - неизменяемые свойства
- Проинициализировать значения свойств по-умолчанию
- Установить значения свойств для конкретного сценария использования, которые отличают от значений по-умолчанию
- Показать окно пользователю
...

Так вот в этом сценарии, если мы начнем перемешивать эти фазы, то в них будет сложно вносить изменения. Конечно, такие фазы на примитивных примерах не очевидны, но когда они начинают формироваться в коде, лучше сразу их реализовывать отдельными блоками и методами, чтобы в будущем не тратить время на рефакторинг спагетти кода.
...
Рейтинг: 0 / 0
20.07.2015, 11:24
    #39011100
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните простой пример со Swing
Blazkowicz"Видимость" это же атрибут самого фрейма, почему бы тогда не устанавливать его вместе с остальными атрибутами (заголовком и размерами и тд) в конструкторе?

Потому что "видимость" это не простой атрибут, это атрибут, который меняет критическое состояние окна.
Если установить атрибуты, а потом вызвать setVisible, то мы получим готовое к использованию окно.
Если установить setVisible, а потом атрибуты, то мы получим динамическое отображение всех изменений на экране.
Именно поэтом порядок вызова других атрибутов и setVisible важен, именно поэтому это свойство такое особенное.
...
Рейтинг: 0 / 0
20.07.2015, 11:28
    #39011108
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните простой пример со Swing
Blazkowicz +1
Cpt. Gray,
создание окно может быть рессурсоёмким (табла тыщи записей).
Потом поёдёт событе onCreate
А потом ты уже свою строку - Показать.
Всё логично.
...
Рейтинг: 0 / 0
20.07.2015, 11:30
    #39011112
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните простой пример со Swing
Petro123Потом поёдёт событе onCreate
на которое может быть подписан совсе другой программист в совсем другом коде.
...
Рейтинг: 0 / 0
20.07.2015, 11:33
    #39011119
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объясните простой пример со Swing
Cpt. GrayКак правильно делать, чтобы все было по фэн-шую? Так как в примере?
Договоритесь в организации.
"Маленькие окна" можно в конструкторе. По умолчанию.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Объясните простой пример со Swing / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]