記得在4年前曾經爲朋友需求用 javafx 寫過簡易的 WEB APP,
如今過了4年 重新再去接觸,感覺當時寫的不曉得是後來改變很多 還是記憶淡忘,
至此大部分都看不懂了。
首先javafx 有個簡易可以拖拉點選編輯LAYOUT的工具 Scene Builder,
這個工具就類似ANDROID 的LAYOUT編輯界面,但是感覺比較好用。
雖然說 javafx 似乎不怎麼被看好,不過對於快速開發簡易的工具,是很容易的,
使用 NetBeans 建立一個 fxml 的專案後,會自動建立 FXMLDocumentController
裏面抓取 fxml 的元件 fx:id="vText_filePath"
只要寫
@FXML
private Text vText_filePath;
感覺蠻方便的,而BUTTON 的ACTION事件 也可以使用onAction= 來設定,
拖拉檔案至元件裏面 可以使用setOnDragOver setOnDragDropped
這可以參考: http://docs.oracle.com/javafx/2/drag_drop/HelloDragAndDrop.java.html
而在使用 TableView 裏面的 TableColumn欄位參數設定的時候,
不曉得我哪裏有設錯 他一直無法映射到我的函數
最後使用手動的方式取出 我自定的函數 getDataPath(),
而函數回傳格式 StringProperty
變數設定 private StringProperty datapath =new SimpleStringProperty();
vTableCol_path.setCellValueFactory(
new Callback<CellDataFeatures<pathList, String>, ObservableValue<String>>() {
@Override
public ObservableValue<String> call(CellDataFeatures<pathList, String> param) {
change body of generated methods, choose Tools | Templates.
return param.getValue().getDataPath();
}
});
而我在 tableView中 最右邊 有多一個刪除的按鈕
ButtonCell 是自定 extends TableCell<Record, Boolean>的物件
vTableCol_btn_deletePath.setCellFactory(
new Callback<TableColumn<Record, Boolean>, TableCell<Record, Boolean>>() {
@Override
public TableCell<Record, Boolean> call(TableColumn<Record, Boolean> p) {
return new ButtonCell(vTable_selectFilePathList, mlist);
}
});
在 ButtonCell 中如果使用刪除的功能,會發現 資料有刪除但按鈕卻還是停留在畫面上
這時需要在 updateltem 中做修改
@Override
protected void updateItem(Boolean t, boolean empty) {
super.updateItem(t, empty);
if (!empty) {
setGraphic(cellButton);
} else {
setGraphic(null);
}
}
最後不得不說 小的APP 編譯的速度不快10~30多秒
要開發小工具都可以輕易的完成,而且還是跨平臺。