Как разделить дизайн логической формы программы на Swing и SWT - PullRequest
2 голосов
/ 31 января 2012

У меня есть неплохие знания в таких средах J2EE, как Spring, Hibernate, и меня вдохновило разделение интересов.Я начинающий в разработке рабочего стола в Java.Вещи идут нечетко в разгаре.В VB дизайн формы будет сохранен как отдельный, а наша форма будет содержать только прослушиватели событий.Но когда я начинаю качаться, многие вещи загружаются в одном классе, что усложняет задачу.Я не могу найти, где я не прав.Подобная вещь продолжается, когда я начал для альтернатив, таких как SWT.

Пример SWT-кода, который я получил из интернета

import java.awt.Color;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import edu.umd.cs.piccolox.swt.PSWTCanvas;
import edu.umd.cs.piccolox.swt.PSWTPath;
import edu.umd.cs.piccolox.swt.PSWTText;
public final class SWTBasicExample {

/**
 * Create and open a new shell on the specified display.
 *
 * @param display display
 * @return a new shell on the specified display
 */
public static Shell open(final Display display) {
    final Shell shell = new Shell(display);
    shell.setLayout(new FillLayout());

    // create a new SWT canvas
    final PSWTCanvas canvas = new PSWTCanvas(shell, 0);

    // create some SWT nodes
    //    and add them as child nodes to the canvas' camera's first layer
    PSWTPath rect = PSWTPath.createRectangle(25, 25, 50, 50);
    rect.setPaint(Color.RED);
    canvas.getLayer().addChild(rect);

    rect = PSWTPath.createRectangle(300, 25, 100, 50);
    rect.setPaint(Color.BLUE);
    canvas.getLayer().addChild(rect);

    PSWTPath circle = PSWTPath.createEllipse(100, 200, 50, 50);
    circle.setPaint(Color.GREEN);
    canvas.getLayer().addChild(circle);

    circle = PSWTPath.createEllipse(400, 400, 75, 150);
    circle.setPaint(Color.YELLOW);
    canvas.getLayer().addChild(circle);

    PSWTText text = new PSWTText("Hello World\nMultiline");        
    text.translate(350, 150);
    text.setPenColor(Color.GRAY);
    text.setBackgroundColor(Color.BLACK);
    canvas.getLayer().addChild(text);

    text = new PSWTText("Goodbye World");
    text.translate(50, 400);
    text.setPenColor(Color.MAGENTA);
    canvas.getLayer().addChild(text);

    shell.open();
    return shell;
}

public static void main(final String[] args) {
    final Display display = new Display();
    final Shell shell = open(display);
    while (!shell.isDisposed()) {
        if (!display.readAndDispatch()) {
            display.sleep();
        }
    }
    display.dispose();
}
}

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

Между тем, я слышал, что Swing - это инфраструктура MVC.Итак, я хочу аккуратное разделение логики, дизайна и контроля.Я хочу, чтобы в процессе разработки Swing и SWT использовались хорошие инженерные методы для облегчения разработки десктопов в Java.Поскольку я использую затмение SWT будет для меня предпочтительнее.

Спасибо,

Ответы [ 3 ]

1 голос
/ 31 января 2012

Что касается Swing против SWT, я использовал оба (но в основном Swing). По крайней мере, когда я изучал SWT (~ 5 лет назад), документация для SWT была очень плохой по сравнению с Swing. Несмотря на то, что мне понравились многие аспекты проектирования SWT, и он проще, чем Swing, IMO, Swing - это тот, который нужно изучать, потому что, IMO, у него гораздо лучшая документация, примеры и т. Д. И он используется во многих других местах.

Что касается общих идей проектирования, один метод, , если ваши основные JPanels (или какой-либо из ваших компонентов) являются модальными , - это привязка Model / DataObject / BusinessObject к каждому JPanel. У JPanel будут методы с именами, например, panelToModel () и modelToPanel (). Первый создает (или обновляет) модель, соответствующую тому, что изменил пользователь, а второй берет модель и обновляет графический интерфейс для соответствия. Лично я ненавижу модальные вещи, но это довольно простой способ начать.

1 голос
/ 01 февраля 2012

В Swing сами компоненты следуют шаблону MVC - большую часть времени.Они основаны на моделях, визуальное представление может быть легко заменено.Для большей цели вы должны реализовать это самостоятельно.Существуют некоторые подходы для разделения проблем, например, использование Action s.Но это ни в коем случае не готовая к использованию платформа приложений, это инструментарий GUI.Существуют проекты для каркасов приложений, таких как JSR 296 - «Swing Application Framework».Но этот не дорабатывается годами.Другой известной платформой, основанной на Swing, является Netbeans платформа , но это уровень выше.

Компоненты SWT не разработаны с концепциями MVC. JFace переносит эту концепцию в SWT.Кроме того, вы можете использовать Eclipse RCP , который является функциональной платформой, аналогичной платформе Netbeans по функциональности.

Так что, если вы программируете «сырой» Swing, вы получаете некоторую поддержку, но все же должныделать много работы самостоятельно.SWT требует от вас более элементарных усилий (и дисциплины).Но для обеих существующих платформ, которые реализуют идеи MVC.

1 голос
/ 31 января 2012

Spring (и другие упомянутые технологии / фреймворки) имеют совершенно другое назначение, чем фреймворки с графическим интерфейсом. Вы не можете требовать одного и того же от двух столь разных технологий. Рабочий стол - это не веб, нет тех правил, о которых мы говорим.

Если вы хотите использовать шаблоны, подобные MVC, с SWT (особенно для привязки данных), изучите JFace .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...