【发布时间】:2020-08-11 05:26:36
【问题描述】:
如何将 BO 货币 (LongProperty) 绑定到 Javafx 可编辑 TreeTableView?使用 Databinding、TextFormatter 和其他 javaFX 东西。
对于普通的 TextField,我找到了这个解决方案:Editiing Currency with a TextField
博:
import java.util.Random;
import javafx.beans.property.LongProperty;
import javafx.beans.property.SimpleLongProperty;
public class SimpleBo {
//a simple LongProperty to store the currency without fractional digits (56,81 € would be 5681)
private LongProperty currencyLong = new SimpleLongProperty();
public SimpleBo() {
setCurrencyLong(new Random().nextLong());
}
public final LongProperty currencyLongProperty() {
return this.currencyLong;
}
public final long getCurrencyLong() {
return this.currencyLongProperty().get();
}
public final void setCurrencyLong(final long currencyLong) {
this.currencyLongProperty().set(currencyLong);
}
}
应用:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeTableColumn;
import javafx.scene.control.TreeTableView;
import javafx.scene.control.cell.TextFieldTreeTableCell;
import javafx.scene.control.cell.TreeItemPropertyValueFactory;
import javafx.stage.Stage;
public class BindingExample extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
Scene scene = new Scene(createTreeTableView());
primaryStage.setScene(scene);
primaryStage.show();
}
private static TreeTableView<SimpleBo> createTreeTableView() {
TreeTableView<SimpleBo> treeTableView = new TreeTableView<>();
// Create column (Data type of Long).
TreeTableColumn<SimpleBo, Number> currencyColumn = new TreeTableColumn<>("Currency");
//Bind Values
currencyColumn.setCellValueFactory(new TreeItemPropertyValueFactory<>("currencyLong"));
//Set Cell Factory
currencyColumn.setCellFactory( param -> new TextFieldTreeTableCell<>());
// Add columns to TreeTable.
treeTableView.getColumns().add(currencyColumn);
SimpleBo firstBo = new SimpleBo();
SimpleBo secondBo = new SimpleBo();
SimpleBo thirdBo = new SimpleBo();
// Root Item
TreeItem<SimpleBo> itemRoot = new TreeItem<>(null);
TreeItem<SimpleBo> itemFirst = new TreeItem<>(firstBo);
TreeItem<SimpleBo> itemSecond = new TreeItem<>(secondBo);
TreeItem<SimpleBo> itemThird = new TreeItem<>(thirdBo);
itemRoot.getChildren().addAll(itemFirst, itemSecond, itemThird);
// Set root Item for Tree
treeTableView.setRoot(itemRoot);
treeTableView.setShowRoot(false);
treeTableView.setEditable(true);
return treeTableView;
}
}
目标应该是:
- 具有 LongProperty 的 Bo(货币价值以美分为单位)
- 可编辑的 TreeTable,采用用户已知格式(可选前导减号, 千位分隔符、小数分隔符、货币符号,没有其他 字符可能)
- Bo 和 TreeTableColumn 之间的双向绑定。
【问题讨论】:
标签: java javafx binding currency treetableview