2011-01-10 57 views
3

我目前正忙於將一箇中小型項目從AWT轉換爲SWT的想法,儘管Swing尚未完全脫離圖片。 我正在考慮將主窗口轉換爲SWT_AWT橋接對象,但我不知道這個工作的語義如何。之後,我計劃更新對話框,但不一定在一個版本中。這可能嗎?將AWT應用程序轉換爲SWT/JFace

有人做過這樣的轉換,可以給我一些提示嗎?有沒有可能在哪裏有教程?是否甚至有一種工具可以自動化這部分?我嘗試了谷歌搜索,但無濟於事。

更新:另外一件事是:目前,這是一個netbeans項目。可能會有幫助,我不知道。

+0

Netbeans項目:你的意思是:你使用Netbeans作爲平臺還是IDE? – Mot 2011-01-10 21:04:56

+0

「主窗口,一個從JFrame派生的對象」我討厭這麼說,但[`javax.swing.JFrame`](http://download.oracle.com/javase/6/docs/api/javax/ swing/JFrame.html)不是AWT類... – Powerlord 2011-01-10 21:31:29

回答

3

我們已經這樣做了好幾次了。 但僅僅是因爲我們要從Swing應用程序轉到Eclipse RCP應用程序,並不是因爲我們喜歡搞亂事物。該項目將真正讓你知道你是否將你的控制器/型號代碼與視圖代碼分開。

一個建議是不要試圖一次轉換所有東西。你最終會得到一堆根本不起作用的混合代碼。你可以開始轉換入口。我會考慮在一個Tab,Dialog或Window中的任何東西,基本上是自包含的單元。如果您有一個打開的窗口,請在SWT中創建窗口,但將其內容設置爲現有的AWT/Swing。這應該是相當直接的,可以讓你習慣(我真的希望他們沒有喝醉,並且有一個很好的理由)實例化和關聯父/子控件。

可能發生的一個問題是透明組件。除了「窗口」類以外,Swing都以Java語言呈現。這使得以您想要的方式呈現事物變得非常容易。在SWT中,有一些限制:

  • 邊界。如果你使用SWT.BORDER,你就會被本機組件使用的任何顏色卡住。您最好的選擇是使用PaintListener並渲染自己的邊框,如果您希望它們具有不同的樣式或顏色。
  • 透明標籤,進度條。我無法使標籤或進度條具有透明背景。如果您希望他們採用父級顏色或繪圖,則需要自己渲染文本和其他控件。
  • 控件。 SWT中有複合和控件。將「控件」看作是執行所有本機API調用的基本本機控件。這些不能被分類,這使事情變得困難。
  • 表格會給你帶來最大的麻煩。在嘗試將JTable轉換爲Table或TableViewer之前,確保一切都穩定。你會花一些時間在這些,特別是如果你有自定義編輯和觀衆。

我還沒有研究過爲什麼SWT設計的方式。我猜這是一個很好的理由。如果有人有博客或防禦設計,這將是非常好的,所以我不必搜索它。一旦發佈,我會刪除這些行,因爲它們與問題無關。

加成

我想補充一點,因爲你有一個現有的產品我認爲作品。我可以給你的最好建議是永遠不要讓你的代碼進入無法編譯和運行的狀態。如果您正在進行轉換,並且您檢查的任何內容始終運行並執行(儘管SWT/AWT/Swing之間存在視覺差異),您將長期保存許多令您頭痛的問題。你可以做的最糟糕的事情就是一次性解決這個問題,並且讓你的代碼在一段時間內處於不穩定的狀態。

1

我建議將其導入到WindowBuilder項目中,因爲WindowBuilder使您能夠解析現有代碼並創建GUI模型,然後將組件變爲SWT或Swing。

0

我們正在準備同樣的步驟:Swing to SWT/JFace。首先我們嘗試確定瓶頸:使用SWT/JFace重新實現由JComponent派生的特殊組件,搜索替換JIDE對接(我們希望使用SWT/JFace而不是RCP來避免太多麻煩)。我們已經想象的最糟糕的事情是,在Swing中,您可以創建組件並稍後將其添加到父級。對於SWT,這是不可能的:父組件必須作爲對子組件構造函數的引用傳遞。在使用SWT之前,這將需要在Swing應用程序中進行重大的重構。

坦率地說,我們評估轉換是一個非常大的變化,因爲我們預計沒有什麼東西可以編譯得相當長。我們儘可能減少這一次的準備時間,但我們會看到它會有多好。從2011年4月6日

更新:

現在,我們重構我們的Swing應用程序總是與創建它們的父組件(如在SWT)。我們的JFrameJDialog的子類被重構爲只有 a JDialog實例,以便更容易切換到SWT的Shell。與此同時,我們重寫了SWT中複雜的組件。

相關問題