Предложение графического класса Java

115
4

Я работаю над проектом java + swing + miglayout, который мы установили в дизайне класса для графических классов, который наследуется от JPanel и JFrame, вот скелеты:


class GammaFrame extends JFrame {
private JPanel __pane__ = null;

public static GammaFrame open(...) {

_instance = GammaFrame()

__pane__ = _instance.getContentPane();
__pane__.setLayout(new MigLayout(...));

_instance.__init__()

# do logic job if any

return _instance;
}

public static void main(String argv[]) {
GammaFrame.open();
}
}

class GammaPanel extends JPanel {

public static GammaPanel create(...) {

_instance = GammaPanel()

_instance.setLayout(new MigLayout(...));

_instance.__init__()

# do logic job if any

return _instance;
}

public static void main(String argv[]) {
JPanel panel = GammaPanel.create()
JFrame frame = new JFrame()
frame.getContentPane().add(panel)

#
# more settings here
#

frame.setVisible(true)
}
}


Каковы могут быть недостатки этого дизайна?

спросил(а) 2020-04-02T19:20:57+03:00 1 год, 2 месяца назад
1
Решение
89

Основной недостаток, который я вижу, заключается в том, что ваш GammaPanel не используется автоматически в классе GammaFrame.


Вы не должны использовать метод main для генерации графического интерфейса. Вы должны позволить конструктору дескриптора GammaFrame создавать экземпляр своих компонентов и показывать их; otherwsie вам нужно будет создать экземпляр всего в методе main, но это непригодно, если у вас несколько кадров и много компонентов.


Обычно вы обычно инкапсулируете весь фрейм с его содержимым только одним классом, который может иметь внутренний класс для пользовательских компонентов (например, ваш GammaPanel).

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


Очень важно, чтобы вы построили свои компоненты графического интерфейса в потоке отправки событий.


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

ответил(а) 2020-04-02T19:37:51.942476+03:00 1 год, 2 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема