2014年9月4日 星期四

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

12 則留言:

  1. 中秋節快樂…

    請教一下,如果我寫到有應用到硬體的.java(RS232或印表機),可以在.jsp(useBean)上使用嗎?

    此外,在聲音這方面,想使用類似銀行號碼機那樣,按1就是0001號(用song[]="0.wav","0.wav","0.wav","1.wav")…可是測了之前聲音是四個同時播放,有解嗎?

    回覆刪除
    回覆
    1. Dear Linuxice0609

      再次感謝你的詢問,有關你的第一個問題,只要牽涉到硬體存取,Java有以下限制。

      Java由於擁有相當嚴謹的安全機制,因此比較起其他類型的網路應用,對用戶端及伺服端更為保障,但相對地,由於Java嚴謹的安全機制以及對用戶端電腦的安全性考慮,因此在開發Java程式尤其是Java Applet或JSP時,便有下列的限制:

      1. 無法存取用戶端的目錄及檔案。
      2. 無法執行用戶端的應用程式。
      3. 僅能與置放Java Applet的伺服器主機建立網路連結,除此之外,無法與其他的主機建立連結。
      4. 僅能讀取部份的系統屬性值。
      5. 不能使用Native Library如DLL或LIB等。

      由於有以上的Java安全性限制,一般的Java Applet或JSP將無法:

      1. 存取用戶端的目錄及檔案。
      2. 使用TCP Port 1024以上的通訊埠。
      3. 與其他的伺服器主機建立Socket網路連線。
      4. 讀取系統屬性值。
      5. 讀取用戶端相關系統設定。

      其解決之道則有:

      1. Java Applet Signing(簽署)。
      2. 定義用戶端的安全性原則(Java Security Policy)。

      刪除
    2. 有關你的第二個問題,你可以參考深入研究JavaFX 2一書的範例18-3有關播放音訊的示範,並參考3-2有關播放陣列的宣告的示範。

      刪除
    3. 例如:

      AudioClip clip[] = new AudioClip[10];

      for (int i=0; i<10; i++) {
      clip[i] = new AudioClip(getClass().getResource("audio/000" + i + ".wav").toString());
      }

      刪除
    4. 作者已經移除這則留言。

      刪除
  2. 感謝您的回覆,等您出的JAVA FX 8啦,一下就到8,Oracle真的是…

    最近比較忙…您真是個好老師,買10本♥

    回覆刪除
    回覆
    1. 謝謝您的鼓勵,快完成了,但找不到書商要出,應該是風險太大,因為台灣沒什麼人在用

      刪除
    2. 作者已經移除這則留言。

      刪除
    3. 我在用呀…加油,如果我成功的話,就讓全台灣都知道JavaFX了…

      刪除
  3. 再請教一下,如果我有兩個choiceBox,可以判斷按到哪一個嗎?

    Swing的ComboBox是可以的…

    回覆刪除
    回覆
    1. public class EventHandlerChoiceBoxSetup_ACTION implements EventHandler {

      @Override
      public void handle(ActionEvent e) {

      ChoiceBox _choiceBoxSetup = (ChoiceBox) e.getSource();
      String buttonName = _choiceBoxSetup.getId();
      System.out.println("_choiceBoxSetup = " + _choiceBoxSetup.getId());
      System.out.println(_choiceBoxSetup.getSelectionModel().getSelectedIndex()); // 預設第一個被選到
      }
      }

      刪除
    2. 你可以模仿範例5-5的方式,以陣列處理:

      ChoiceBox choicebox[] = new ChoiceBox[5];

      for (int i=0; i<5; i++) {
      final ChoiceBox chbox = choicebox[i] = new ChoiceBox(title[i]);

      choicebox[i].getSelectionModel().selectedIndexProperty().addListener(new ChangeListener() {
      @Override public void changed(ObservableValue observable, Number oldValue, Number newValue) {
      ...
      }
      });

      // Mouse Entered Event
      choicebox[i].setOnMouseEntered((MouseEvent e) -> {
      chkbox.setEffect(shadow);
      });

      // Mouse Exit Event
      choicebox[i].setOnMouseExited((MouseEvent e) -> {
      chkbox.setEffect(null);
      });
      }

      刪除