目前日期文章:201101 (5)

瀏覽方式: 標題列表 簡短摘要

我的電腦經常開了一堆網頁,其中包含很耗資源的 Hotmail 及 USTREAM 網路電台,光那二個大怪獸用 Opera 開始就耗掉 164M 了,再加上 imo.im 也是用 flash 做的也耗掉 74M ,再加上 eclipse 本身也耗掉 137M,全部加起來電腦就顯得有點頓頓的,造成硬碟一直轉轉轉,配置 1G RAM 根本不夠用啊。所以每次在 eclipse 輸入程式碼的時候,一遇到程式碼自動提示功能就常常 LAG 好久,所以就想到要把它關掉不用,節省一些時間。

要關掉程式碼自動提示功能很簡單,只要把 auto activation 功能取消即可。Windows → Preferences → Java → Editor → Content Assist → Auto-Activation 裏面的 Enable auto activation 取消即可。

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

每次在寫 button 的 actionPerformed 時,經常會遇到一個問題,就是為了取得 JFrame instance 而煩惱。因為 actionPerformed 通常位於 ActionListener 內,而 ActionListener 通常是一個 inner class,透過 button 的 addActionListener 加入。此時為了控制一些 JFrame 內的元件,經常需要取得 JFrame 的 instance 才可以。當然,傳遞 window event 也是一種應用。

最簡單的方式就是透過 ActionEvent.getSource() 先取得 JButton 的 instance,再利用 SwingUtilities.windowForComponent 找出 JButton 所屬的 Window instance 即可。

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

這次再把一個 class 又拆成三個 class,這樣應該算是重構吧,只是還沒進階到 unit test 的階段,還要加油加油。

這次主要是在加入 WindowListener 時,發現在 addWindowListener(new DualBoot()) 會造成 JApplet 產生而浪費很多資源,如果把 WindowListener 獨立成一個 class 又顯得太多餘,我又不喜歡搞一堆 inner class。最後幹脆分成三個 class,這樣也比較符合單一職責原則(Single Responsibility Principle),並且在 applet 及 frame 內加入變體的 Singleton Pattern。為什麼叫做變體呢?因為理論上 applet 及 frame 只有一個單獨存在的個體,而且 applet 的建構函數是用 browser 調用,我也沒法子阻止。所以只是單純建立 getInstance 函數而已,並沒有隱藏建構函數。另外把 applet 的建構函數拿掉,之前都忘了呼叫 super(),雖然都沒事發生,但是為了確保一些問題,還是採用標準 applet 步驟,把所有建立元件動作放到 init()。

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

在前一篇把雙啟動功能分割成二個 class 來做,主要是考量在 Loader.class 可以專心做一些有關 applet 及 window 的變化。其實是可以將兩者合而為一,因為二者都是以 contentPane 為主體,所以可以直接把 JApplet 的 contentPane 指定給 JFrame 即可。

透過 jnlp 執行範例程式

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()

點我執行範例程式

一般人寫 java 程式不是 frame(application) 就是 applet,兩者總是分開撰寫。其實 JFrame 跟 JApplet 兩者是很相似的。都包含一個 JRootPane,也都是把元件加到 contentPane 裏。所以就可以利用這個特性,做一個 class Main extends JPanel,另外再做一個 class Loader extends JApplet,包含 void main(String[] args)。當透過 java.exe 執行時,就會執行 main 函數;當透過 appletviewer.exe 或 browser 執行時,就會執行 Loader 函數。這樣一來就可以做出可以同時以 applet 及 frame(application) 執行的 JAR。

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()