2009-03-06 60 views
3

我想知道是否有人尝试运行Swing组件内托管的复杂SWT UI。在Swing应用程序中运行SWT组件

我已经设法得到一个非常简单的演示,但如果其他人尝试过并失败/成功做到这一点,那么从他们的经验中学习会很好。

因此,重申我的应用程序是一个Swing应用程序,我希望使用复杂的SWT UI组件(拖放,弹出窗口和对话框) - 任何人管理它?

回答

3

我已经使用了Swing和SWT,虽然从来没有在同一个应用程序/项目中。

只要你不试图在相同的窗口内混合组件,我不会看到任何理由,你不能完全分离每个使用特定的小部件组的窗口/对话框。然而,试图在单个窗口内混合使用SWT和Swing可能永远不会工作,或者至少会导致很多问题,因为这两个小部件集都依赖完全不同的绘图/布局方式 - Swing的所有组件都直接在Java中处理,并且与底层操作系统完全分离,而SWT明确依赖底层操作系统来完成所有(或大部分)GUI渲染。试图混合两者可能会导致各种问题。

当然,我会扔了一贯的“这不是一个推荐的做法”的回应,以及:除非你心中有一个真正明确的目标在这里,在同一个应用程序混合不同的插件集是不是一个好理念。 Swing和SWT有两个完全不同的哲学和底层架构。事实上,SWT源于IBM/OTI不喜欢Swing采取的方法,因此选择实施自己的小部件。通过这种与GUI小部件对比的方法,您最好选择一个并坚持下去,而不是将两者混合在一起。

2

混合Swing和SWT并不是最好的选择,但是如果你没有选择,它并不是一个非常难以控制的野兽。试着在整个代码中执行一些规则/标准。例如。保留Swing中的所有对话框(如果没有理由,不要混合使用这两个对话框),使用命名约定来区分Swing组件和SWT组件等。确保您清楚Swing和SWT的方式在开始解决任何复杂的UI问题之前,组件由OS/JVM处理。

要注意的一件事是在Swing和SWT组件之间拖放。这有点棘手,但特别是如果你开始投入自定义数据类型。