是否有一种很好的方法来抽象GUI以便可以使用SWT或Swing?

时间:2010-01-01 20:15:14

标签: java user-interface swing swt

我正在编写一个目前有SWT GUI的应用程序,但希望最终用户能够在SWT和Swing之间进行选择。我已经尝试过在程序的不同层之前抽象GUI细节,但从未对结果感到满意。是否有一个商定或好的方法来做到这一点?

4 个答案:

答案 0 :(得分:8)

不幸的是,我不相信有一个与工具箱无关的API或类似的。

所以也许值得看看model-view-controller模式。您需要将尽可能多的功能从GUI抽象到控制器中,以便GUI组件很薄并且专用于您选择的特定窗口工具箱。

这将允许您使用最少的重复代码插入Swing视图来代替GWT视图(反之亦然)。

另请注意,这样可以更轻松地测试 lot ,因为尽可能多地将其折叠到控制器或模型中。

答案 1 :(得分:2)

如果你的唯一目标是让用户在SWT或Swing之间选择绘制他们的用户界面,那么SWTSwing就是一个选择。您可以在SWT中编写代码并在启动期间选择SWT实现jar,并相应地调整类路径。

SWTSwing是使用Swing实现的SWT API。它与每个本机SWT实现的作用相同:它提供了与底层GUI API的桥梁。

我为什么要写“本来可以”?不幸的是,该项目似乎已经死了,陷入了未完成的SWT-3.2实施,尽管很多工作似乎已经完成,正如您在webstart演示中所看到的那样。姐妹项目EoS(Eclipse on Swing)甚至还有一个正在运行的原型。所以我不能真正推荐使用它,即使我喜欢这个想法。

答案 2 :(得分:1)

是否有一种商定或好的方法来抽象出特定于GUI的代码?

简而言之,答案是否定的。

使用任何特定GUI库的麻烦在于每个GUI都带有一组影响库的每次使用的基本设计原则。除非遇到两个这样的库,这些库在这些设计原则的每个特定内容上都是一致的,否则不能简单地将一个GUI替换为另一个GUI。

有许多库试图将他们的设计强加于每个设备下面的一堆不同的GUI上,但是这些库需要大量的编程。同样,将一组设计范式强加给另一套设计范例的尝试通常不会完全成功。

这些库的例子是QT,wxWidgets,当然还有Java的基础AWT。

最后,你几乎不得不接受你要选择一个图书馆并坚持下去。

答案 3 :(得分:0)

是的,使用SwingWT,使用SWT作为后端的Swing实现。

许多人更喜欢更高级别的Swing API,但SWT使用本机小部件。这个库显然给了你们两个。

它还允许Swing应用程序使用SWT后端不加修改地运行(因为您的程序已经使用SWT编写,但对其他人没有帮助)。根据描述,该实现使用自定义类加载器,该加载器用SwingWT调用替换Swing调用。应该可以让用户选择是否这样做。

作者似乎没有积极开发它,但他仍在审查/应用从其他人那里收到的补丁(最近,在2012年早些时候)。