2014年11月29日 星期六

JavaFX Fractal Tree

【參考資料】

[1] Java Official Web Site:http://www.oracle.com/technetwork/java/index.html
[2] JavaFX:http://www.oracle.com/technetwork/java/javafx
[3] JavaFX 8.0 API Specification.
[4] Java Platform, Standard Edition 8 API Specification.

© Chia-Hui Huang

JavaFX Fractal Tree

【參考資料】

[1] Java Official Web Site:http://www.oracle.com/technetwork/java/index.html
[2] JavaFX:http://www.oracle.com/technetwork/java/javafx
[3] JavaFX 8.0 API Specification.
[4] Java Platform, Standard Edition 8 API Specification.

© Chia-Hui Huang

2014年11月28日 星期五

JavaFX Barnsley Fern

【參考資料】

[1] Java Official Web Site:http://www.oracle.com/technetwork/java/index.html
[2] JavaFX:http://www.oracle.com/technetwork/java/javafx
[3] JavaFX 8.0 API Specification.
[4] Java Platform, Standard Edition 8 API Specification.

© Chia-Hui Huang

JavaFX Fractal Tree

【參考資料】

[1] Java Official Web Site:http://www.oracle.com/technetwork/java/index.html
[2] JavaFX:http://www.oracle.com/technetwork/java/javafx
[3] JavaFX 8.0 API Specification.
[4] Java Platform, Standard Edition 8 API Specification.

© Chia-Hui Huang

JavaFX Julia Set


【參考資料】

[1] Java Official Web Site:http://www.oracle.com/technetwork/java/index.html
[2] JavaFX:http://www.oracle.com/technetwork/java/javafx
[3] JavaFX 8.0 API Specification.
[4] Java Platform, Standard Edition 8 API Specification.

© Chia-Hui Huang

JavaFX Koch Snowflakes

【參考資料】

[1] Java Official Web Site:http://www.oracle.com/technetwork/java/index.html
[2] JavaFX:http://www.oracle.com/technetwork/java/javafx
[3] JavaFX 8.0 API Specification.
[4] Java Platform, Standard Edition 8 API Specification.

© Chia-Hui Huang

2014年11月27日 星期四

JavaFX Fractal Tree


【參考資料】

[1] Java Official Web Site:http://www.oracle.com/technetwork/java/index.html
[2] JavaFX:http://www.oracle.com/technetwork/java/javafx
[3] JavaFX 8.0 API Specification.
[4] Java Platform, Standard Edition 8 API Specification.

© Chia-Hui Huang

2014年11月24日 星期一

JavaFX 8技術手冊

完成JavaFX 8技術手冊第五校,就等封面完成就可以出版了,章節包括:

1. JavaFX
2. JavaFX程式架構
3. Layout Pane
4. 效果
5. 事件
6. 按鈕
7. 選項項目
8. 捲軸、滑動軸、進度指示器與進度列
9. 選單
10. 文字編輯物件
11. 窗格
12. 對話盒
13. Web
14. 樹
15. 表格
16. 樹狀表格
17. 繪圖
18. 動畫
19. 圖表
20. 多媒體
21. 3D

© Chia-Hui Huang

2014年11月21日 星期五

JavaFX 8技術手冊

一天之內完成JavaFX 8技術手冊的第三與第四校,真是瘋狂賣命,快結束了。

© Chia-Hui Huang

2014年11月16日 星期日

JavaFX 8技術手冊

今天完成JavaFX 8技術手冊的第二校,寫書不難,校稿才是最辛苦的事。

自2000年開始寫第一本書至今,已出了繁體和簡體書共40本,賣得好不好是一回事,看著自己辛苦的成果放在書架上,就已經很滿足了。今年終於因為健康的關係,不得不忍痛停止。


© Chia-Hui Huang

2014年11月11日 星期二

Fisheye Picture Menu (JavaFX)

Fisheye Picture Menu (魚眼式圖片功能表) 是商業智慧軟體所提供的功能之一,類似MacOS的Dock功能表,功能表包含數個圖片,當滑鼠靠近圖片時,圖片會自動放大,以產生動態更改大小的效果。透過魚眼式圖片功能表可將資料依不同的條件篩選出不同的結果,以建立圖表互動,讓圖表更加多樣化。

此次以JavaFX開發Fisheye Picture Menu,以滑鼠事件處理當滑鼠移至圖片上方時,則放大圖片比例並顯示相對應的圖表。當滑鼠離開圖片時,則恢復圖片正常比例。

【執行結果】
【參考資料】

[1] Java Official Web Site:http://www.oracle.com/technetwork/java/index.html
[2] JavaFX:http://www.oracle.com/technetwork/java/javafx
[3] JavaFX 8.0 API Specification.
[4] Java Platform, Standard Edition 8 API Specification.

© Chia-Hui Huang

JavaFX特效 (2) 漸層 (Gradient) 處理

今天刊登於CodeData網站,有關JavaFX特效之漸層 (Gradient) 處理:

http://www.codedata.com.tw/java/javafx-effect-2-gradient/

© Chia-Hui Huang

2014年11月4日 星期二

JavaFX Mandelbrot Set

Mandelbrot Set (曼德布洛特集) 是一種在複平面上組成分形之點集合,以數學家Benoit B. Mandelbrot為名。

以前曾以Java Swing寫過一個Mandelbrot Set程式,這次試著改以JavaFX,還有很多地方需要修改。
Mandelbrot Set (Java Swing)

Mandelbrot Set (JavaFX)

【參考資料】

[1] Java Official Web Site:http://www.oracle.com/technetwork/java/index.html
[2] JavaFX:http://www.oracle.com/technetwork/java/javafx
[3] JavaFX 8.0 API Specification.
[4] Java Platform, Standard Edition 8 API Specification.
[5] Mandelbrot Set: http://en.wikipedia.org/wiki/Mandelbrot_set.

© Chia-Hui Huang

如何在JavaFX中開啟新視窗?

JavaFX應用程式需繼承javafx.application.Application抽象類別,Application抽象類別類似於Java Swing的JApplet類別,以其「生命週期」執行JavaFX,分別為:
  • init():初始化JavaFX應用程式。
  • start():為JavaFX應用程式的進入點,在此為Java Applet。
  • launch():啟動獨立 (Standalone) 的JavaFX應用程式,在此為視窗程式。
  • stop():當JavaFX應用程式結束之前,將執行stop()方法。
其程式架構如下:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.stage.Stage;
...

// 繼承javafx.application.Application抽象類別
public class JavaFXHelloWorld extends Application {

  @Override
  public void start(Stage primaryStage) {
    ...
  }

  public static void main(String[] args) {
    launch(args);
  }
}
其中javafx.stage.Stage類別為JavaFX最上層的容器 (Container),類似於Java Swing的JRootPane類別,用以置放SceneSubScene物件。javafx.scene.Scene類別則是JavaFX Scene Graph,可藉以繪圖或配置各類GUI物件。

因此欲在原視窗中產生另一個新視窗,只要使用Stage類別則可,以下範例示範當點選原視窗中的按鈕時,則產生另一個新視窗:
public class StageDemo extends Application {

  @Override
  public void start(Stage primaryStage) {
    
    // Normal Button
    Button button = new Button();
    button.setText("New Window");
    button.setPrefSize(150, 20);
    
    button.setOnAction(event -> {
      newWindow();
    });
    
    BorderPane borderpane = new BorderPane();
    borderpane.setCenter(button);
    
    // Set the Layout Pane of Scene
    Scene scene = new Scene(borderpane);    
    // Set the title of Stage
    primaryStage.setTitle("Stage Demo");
    // Set the width of Stage
    primaryStage.setWidth(250);
    // Set the height of Stage
    primaryStage.setHeight(150);
    primaryStage.setScene(scene);
    primaryStage.setResizable(false);
    
    // Show Stage
    primaryStage.show();
  }
  
  private void newWindow(){
    Label label1 = new Label("Name:");
    Label label2 = new Label("Birthday:");
    Label label3 = new Label("Tel.:");
    
    TextField textfield1 = new TextField();
    textfield1.setText("Athena");
    textfield1.setPrefColumnCount(15);
    textfield1.selectAll();
    textfield1.setTooltip(new Tooltip("Name"));
    
    TextField textfield2 = new TextField();
    textfield2.setPrefColumnCount(15);
    textfield2.setAlignment(Pos.CENTER_RIGHT);
    textfield2.setCursor(Cursor.CROSSHAIR);
    textfield2.setTooltip(new Tooltip("Birthday"));

    TextField textfield3 = new TextField();
    textfield3.setText("1234567890");
    textfield3.setPrefColumnCount(15);
    textfield3.setAlignment(Pos.CENTER);
    textfield3.setCursor(Cursor.HAND);
    textfield3.selectAll();
    textfield3.setTooltip(new Tooltip("Phone Number"));
           
    GridPane gridpane = new GridPane();
    gridpane.setAlignment(Pos.CENTER);
    gridpane.setHgap(10);
    gridpane.setVgap(10);
    gridpane.setPadding(new Insets(5, 5, 5, 5));

    gridpane.add(label1, 0, 0);
    gridpane.add(label2, 0, 1);
    gridpane.add(label3, 0, 2);

    gridpane.add(textfield1, 1, 0);
    gridpane.add(textfield2, 1, 1);
    gridpane.add(textfield3, 1, 2);

    // Set the Layout Pane of Scene
    Scene scene = new Scene(gridpane);
    
    Stage stage = new Stage();

    // Set the title of Stage
    stage.setTitle("New Window");
    // Set the width of Stage
    stage.setWidth(300);
    // Set the height of Stage
    stage.setHeight(150);
    stage.setScene(scene);
    stage.setResizable(false);

    // Show Stage
    stage.show();
  }

  /**
   * @param args the command line arguments
   */
  public static void main(String[] args) {
    launch(args);
  }
}
【執行結果】

當點選原視窗中的按鈕時,則產生另一個新視窗:
【參考資料】

[1] Java Official Web Site:http://www.oracle.com/technetwork/java/index.html
[2] JavaFX:http://www.oracle.com/technetwork/java/javafx
[3] JavaFX 8.0 API Specification.
[4] Java Platform, Standard Edition 8 API Specification.

© Chia-Hui Huang