[英]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.