Table View のデータは変えず表示だけを変える

Table View のデータはそのままに、表示に装飾を加える。
例えばデータはIntegerだけど表示では単位をつけたい、など。

@Override
public void start(Stage primaryStage) {
    //テーブル用のデータを作成
    final ObservableList<TableDataFormat> list = FXCollections.observableArrayList(
        new TableDataFormat("data1", 1),
        new TableDataFormat("data2", 2),
        new TableDataFormat("data3", 3)
    );
    //カラムの作成
    TableColumn stColumn = new TableColumn("String Column");
    TableColumn intColumn = new TableColumn("Integer Column");
    //データとひも付け
    //PropertyValueFactory の引数は TableDataFormat の変数名と合わせる
    stColumn.setCellValueFactory(new PropertyValueFactory("st"));
    //Table に紐づけたデータは変えず、表示だけを変える
    intColumn.setCellValueFactory(new Callback<CellDataFeatures<TableDataFormat, String>, ObservableValue<String>>(){
        @Override
        public ObservableValue<String> call(CellDataFeatures<TableDataFormat, String> tdf) {
            return new ReadOnlyObjectWrapper(tdf.getValue().getNum() + "%");
        }
    });
 
    stColumn.setPrefWidth(150);
    intColumn.setPrefWidth(140);
 
    final TableView table = new TableView();
    table.getColumns().addAll(stColumn, intColumn);
    table.setItems(list);
    table.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);
    table.setOnMouseClicked(new EventHandler<MouseEvent>() {
        @Override
        public void handle(MouseEvent t) {
            System.out.println("aa");
        }
    });
 
    VBox vbox = new VBox();
    vbox.getChildren().addAll(table);
    primaryStage.setScene(new Scene(vbox, 300, 250));
    primaryStage.show();
}
 
//テーブル用のデータクラス
public class TableDataFormat{
    private SimpleStringProperty st;
    private SimpleIntegerProperty num;
 
    public TableDataFormat(String st_, int num_) {
        this.st = new SimpleStringProperty(st_);
        this.num = new SimpleIntegerProperty(num_);
    }
    //アクセサ
    //メソッド名は get/set + 変数名 
    public String getSt() { return st.get();}
    public void setSt(String st_) { st.set(st_);}
    public Integer getNum() { return num.get();}
    public void setNum(int num_) { num.set(num_);}
}

コメントをどうぞ

メールアドレスが公開されることはありません。

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">

Go back to top