JavaFX TableView和Java Beans Pattern Convention

來源:互聯網
上載者:User

標籤:

Computer Science II 課上的作業老師要求完成一個Course Schedule的Exporter,在後台介面需要實現三個表格:Holiday Schedule, Lecture Schedule, Assignments Schedule。

某位同學忙活了半天好不容易建立了一個TableView,但是當edit表中的cell的時候,對應的值總是不變。昨天晚上看了十幾分鐘把我之前做錯的點全部都過了一遍,依然找不到錯誤。不過秉承著死磕到底的精神,今天看了Oracle的TableView的教程和stackoverflow上同類問題的解答,終於有了一個解答的思路。真是山窮水複疑無路柳暗花明又一村!如果是正常的程式Bug那麼就沒有記錄在部落格上的意義了。因為其實這個Bug是不容易發現的,因為這個Bug產生的原因是因為JavaFX組件的機製造成的。

在這篇博文裡我主要想寫兩個部分: JavaFX的TableView的簡單實現和Java Beans Pattern Convention。

JavaFX TableView - Oracle JavaFX TableView Tutorial 

建立TableView的主要操作:

 

1.建立Table

  首先構建表格的基本骨架:

  TableView table = new TableView();

  TableColumn firstNameCol = new TableColumn("first name"); // "first name"是這個TableColumn的title

  TableColumn lastNameCol = new TableColumn("last name");  // "last name"是這個TableColumn的title

  table.getColumns().addAll(firstNameCol, lastNameCol); // 將TableColumn“包裹”進table

  然後設定每一列表格的data type:

  //下面這兩行分別初始化了每一列的資料類型. PropertyValueFactory<S, T>("nameInModel") 之中,S表示在資料模型(見下欄)之中的基本類型,T表示在表格之中顯示的類型,nameInModel表示這個資料域在資料模型裡面的變數名字。這些是Java Beans Pattern的約定俗成的規定,如果不按照這個標準來完成的表格就無法實現更改資料之後自動更新GUI介面。

  firstNameCol.setCellValueFactory(new PropertyValueFactory<String, String>("firstName")); // 

  lastNameCol.setCellValueFactory(new PropertyValueFactory<String, String>("lastname"));

  

2.定義資料模型(Data Model)

  Public Class Person{

    final StringProperty firstName = new SimpleStringProperty(); // StringProperty是虛類, SimpleStringProperty是一個concrete class

    final StringProperty lastName = new SimpleStringProperty(); 

    // Getters Setters

    // 注意!下面這兩個函數非常重要,因為Java beans(後面會介紹)的代碼規範,Data Model Class的variable需要實作類別似於 xProperty()這樣的函數,x是變數名。

    public StringProperty firstNameProperty(){ return firstName; }

    public StringProperty lastNameProperty() { return lastName; }

  }

  之後我們要將建立一個ObservableList來儲存這些Person的執行個體資料。

  ObservableList data = ... // 反正就加了person的執行個體進去了

 

3.資料模型和table關聯

  table.setItems(data);

  好了,現在資料就和表格關聯起來了!由於我們的資料是存在ObservableList裡面的,所以每當表格裡面有更改的時候,Table的view就會自動更新。

 

未完待續....

 

參考資料:

http://stackoverflow.com/questions/20048072/cant-fill-table-with-items-with-javafx
http://stackoverflow.com/questions/17035478/javafx-propertyvaluefactory-not-populating-tableview
http://blog.netopyr.com/2011/05/13/javafx-properties/
https://github.com/marcojakob/code.makery.ch/blob/master/collections/blog/14-05-10-update-to-javafx-8-whats-new.md
https://docs.oracle.com/javafx/2/ui_controls/table-view.htm

JavaFX TableView和Java Beans Pattern Convention

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.