我在Spring,Hibernate等J2EE框架方面有很好的知识,并且受到关注点分离的启发。我是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中的桌面开发。因为我使用eclipse SWT对我来说会更好。
谢谢,
答案 0 :(得分:1)
Spring(以及其他提到的技术/框架)与GUI框架完全不同。您可能不会从两种不同的技术中要求相同的东西。桌面不是网络,我们说的规则不一样。
如果你想在SWT中使用类似MVC的模式(尤其是数据绑定),请学习JFace。
答案 1 :(得分:1)
至于Swing vs. SWT,我使用了两者(但主要是Swing)。至少回到SWT(大约5年前)时,与Swing相比,SWT的文档非常差。即使我喜欢SWT的许多设计方面,并且它比Swing,IMO更简单,但Swing是学习的,因为,IMO,它具有更好的文档,示例等。并且它被用于更多的地方。 / p>
对于一般设计思想,一种技术,如果你的主要JPanels(或你的组件是什么)是模态的,就是要有一个与每个JPanel相关联的Model / DataObject / BusinessObject。 JPanel将具有类似panelToModel()和modelToPanel()的方法。前者创建(或更新)与用户已更改内容相对应的模型,后者采用模型并更新GUI以进行匹配。现在,就个人而言,我讨厌模态的任何事情,但这是一种相当简单的入门方式。
答案 2 :(得分:1)
在Swing中,组件本身遵循MVC模式 - 大多数时候。它们基于模型,可以轻松替换视觉表示。对于更大的范围,您必须自己实现。存在一些分离关注点的方法,例如Action
的用法。但它绝不是一个随时可用的应用程序平台,它是一个GUI工具包。存在应用程序框架的项目,如JSR 296 - “Swing Application Framework”。但这个问题多年来都没有定稿。另一个基于Swing的值得注意的平台是Netbeans platform,但这个级别更高。
SWT组件不是使用MVC概念设计的。 JFace将此概念引入SWT。在此基础上,您可以使用Eclipse RCP,这是一个类似于Netbeans平台功能的应用程序框架。
因此,如果您正在编写“原始”Swing,您将获得一些支持,但仍需要自己做很多工作。 SWT要求您提供更多基本的努力(和纪律)。但对于两个实现MVC思想的现有平台。