2012/12/22

JavaFX 簡易瀏覽器

關於JavaFX的詳細介紹可以參考『認識JavaFX』,該作者寫得非常詳細,這次為什麼我要選擇使用JavaFX開發『傳輸腦波資料程式』呢?

再大二剛進實驗室時,開始接觸到雅博學長用Swingawt所組成的『異質換手程式』,雖然介面沒有向之前所使用的C#那麼漂亮,不過畫面只需要key in一些Code就有了,不用在那邊拖拉,這也是Swingawt吸引我的地方

不過我接觸Swingawt的時間似乎有點晚了,大家幾乎都不用那樣的語言去撰寫視窗化程式了,而且現在寫程式是越寫越方便了,誰還會用key in的方式去寫視窗化程式?應該也只有遊戲或是運算的介面才會需要吧

JavaFX在我寫Java就有聽學長再說了,那時候不太知道是什麼玩意。這次在『2012 Java認證日』由張益裕 講師所演講『JavaFX與Scene Builder- 美觀、快速、流暢的Java用戶端應用程式』的主題得知的,想不到現在的JavaFX可以套用css樣式,讓版面更加漂亮,之前在寫Swingawt覺得畫面非常醜陋

好啦,廢話這麼多,我就直接開始進入主題吧!



JavaFX這次頗有Android氣味存在

對了,Scene Builder是甲骨文為了JavaFX所開發出來的一個視窗編輯器,開發者可以先透過Scene Builder拖拉畫面,在透過NetBeansEclipse來編輯後端

這次我選擇使用NetBeans進行開發,為何不使用擅長的Eclipse呢?人總是想嘗鮮的!

先到NetBeans官網下載支援Java EE版本,也記得去下載Scene Builder,最重要的JavaFX可別忘記下載喔,不然開發不了就別哭哭了


首先我們開啟NetBeans,選擇Tools的New Project


選擇JavaFX/JavaFX FXML Application



要注意如果你要更動FXML檔名,記得在第一個紅框框修改,那Class Name則在最下面的紅框修改

新開啟的專案通常會有三個檔案,分別是Application Class Name.java,Project Name.fxml以及Project Name.java


Application Class Name.java裡面只是將頁面載入,做一些初始值而已
package javafxapplication1;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

/*
 * @author Chen Yo
 */
public class JavaFXApplication1 extends Application {
    
    @Override
    public void start(Stage stage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("Test.fxml"));
        Scene scene = new Scene(root);
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}


如果有安裝Scene Builder點兩下Project Name.fxml則使用Scene Builder開啟


我們先將預設的畫面都刪除掉,並加入Hyperlink和Web View,先不要關閉,還有後續動作


接著將以下的Code貼到Project Name.java

package javafxapplication1;

import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;

/*
 * @author Chen Yo
 */
public class TestController implements Initializable {
    
    @FXML
    private WebView webView;
    private WebEngine engine = new WebEngine();
    
    @FXML
    private void HyperlinkAction(ActionEvent event) {
        engine=webView.getEngine();
        engine.load("http://writecodepeople.blogspot.tw/");
    }
    
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
    }    
}


接著我們回到Scene Builder畫面,選擇Code部份,並將onAction設定為HyperlinkAction



並且將Web View對應到程式碼的webview

接著按下Tools的Run Project(快捷鍵:F6)


會跳出一個視窗,這就是我們剛剛所撰寫的成果


按下連結標籤,則會跳出我的網誌啦


看來這次甲骨文將WebView捲軸做的還不錯,還蠻喜歡的
對了,如果在設計Layout時想預覽的話,可以在Scene Builder的Tools選擇Preview/Preview in Windonws (快捷鍵:Ctrl+P)

參考文章:
http://docs.oracle.com/javafx/2/ui_controls/hyperlink.htm