[英]Converting an AWT application to SWT/JFace
我目前正在尝试将一个小型/中型项目从AWT转换为SWT,尽管Swing还没有完全脱离图片。 我正在考虑将主窗口转换为SWT_AWT桥接对象,但我不知道这个工作的语义如何。 之后,我计划更新对话框的对话框,但不一定在一个版本中。 这可能吗?
有人做了这样的转换,可以给我一些提示吗? 那里甚至可能有教程吗? 甚至可能有一个工具可以自动化部分内容吗? 我试过谷歌搜索,但无济于事。
更新:另外一件事是:目前,这是一个netbeans项目。 我不知道可能有所帮助。
我们这样做了很多次。 但这只是因为我们从Swing应用程序转到Eclipse RCP应用程序而不是因为我们喜欢弄乱事物。 该项目将真正让您知道您是否已将控制器/型号代码与视图代码分开。
一个建议是不要尝试同时转换所有内容。 你最终会得到一堆根本不起作用的混合代码。 您可以从转换门户开始。 我会考虑在Tab,Dialog或Window中的任何东西,基本上是自包含单元。 如果您有一个打开的窗口,请在SWT中创建窗口,但将其内容设置为现有的AWT / Swing。 这应该是相当直接的,并允许你习惯(我真的希望他们没有喝醉,并有充分的理由)实例化和关联父/子控件。
可能发生的一个问题是透明组件。 除了“窗口”类之外,Swing都是用Java呈现的。 这使得以您希望的方式呈现事物变得非常容易。 在SWT中,有一些限制:
我还没有研究过为什么SWT的设计方式。 我猜这是一个很好的理由。 如果有人有博客或防御它的设计,那将是很好的,所以我不必搜索它。 一旦发布,我将删除这些行,因为它们与问题无关。
加成
我想补充一点,因为你有一个现有的产品,我认为是有效的。 我能给你的最好的建议是永远不要让你的代码进入一个无法编译和运行的状态。 如果您正在进行转换,那么无论您在何处运行和执行(尽管SWT / AWT / Swing之间存在视觉差异),您将从长远来看为您节省许多麻烦。 你可以做的最糟糕的事情是尝试一次解决这个问题,让你的代码一次处于不稳定的状态数周。
我建议将它导入WindowBuilder项目,因为WindowBuilder使您能够解析现有代码并创建GUI模型,然后将组件转换为SWT或Swing。
如果您考虑在同一个应用程序中混合使用SWT和Swing,那么这个Eclipse Corner文章将非常有用。
我们正在准备同样的步骤:Swing到SWT / JFace。 首先我们尝试确定瓶颈:重新实现从带有SWT / JFace的JComponent
派生的特殊组件,搜索JIDE对接的替换(我们希望使用SWT / JFace,而不是RCP以避免太多麻烦)。 我们已经想到的最糟糕的事情是,在Swing中,您可以创建组件并稍后将其添加到父组件中。 使用SWT时,这是不可能的:必须将父组件作为对子组件构造函数的引用传递。 这将需要在使用SWT之前在Swing应用程序中进行重大重构。
坦率地说,我们认为转换是一个非常重大的变化,因为我们期望没有任何东西可以被编译为很长的时间。 我们通过尽可能好地准备一切来减少这个时间,但我们会看到它有多好用。
2011年4月6日更新:
我们现在重构我们的Swing应用程序以始终使用其父级创建组件(如在SWT中)。 我们的子类JFrame
和JDialog
得到了重构,只是有一个JDialog
实例,使其更容易切换到SWT的Shell
。 与此同时,我们在SWT中重写了复杂的组件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.