スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[JavaFX] TableView 列数を可変にする


テーブルの列数があらかじめ分かっているなら、前回のような実装で対応できるが、
列数が不明(可変)な場合、そう簡単にはいかない。

で、下記のサイトにそのあたりの対処方法が書いてあったので参考にして、実装してみた。
http://d.hatena.ne.jp/ats337/20111012/1318440993

■ソース

//★1. レコード用のクラスを作る。
//この部分のポイントは、ObjectPropertyにMap持たせるあたり。
//1つのインスタンスで、列名をキーにして値を取得できるようにしておく。
class RData{
private ObjectProperty<Map<String, String>> prop =
new SimpleObjectProperty<Map<String, String>>();

public RData setData(Map<String,String> dataMap){
prop.set(dataMap);
return this;
}

public String getData(String key){
return prop.get().get(key);
}
}

@FXML
void initialize() {

// とりあえず、例として10列の場合
// 実際には、DBから取得したテーブルの列数とか、実行時に変更されることを想定
int colNum = 10;

for(int i =0; i< colNum; i++){
//★2. TableColumn(列)を作る
TableColumn<RData, String> col =
new TableColumn<RData, String>("列" + i);

//★3. TableColumn(列)とレコード用クラスを関連付ける

// RDataのMapから値を取り出すためのキーをfinalで作成。
final String key = "列" + i;

// CallbackをPropertyValueFactoryで作るのではなく、自前で実装する
col.setCellValueFactory(
new Callback<CellDataFeatures<RData, String>, ObservableValue<String>>() {
@Override
public ObservableValue<String> call( CellDataFeatures<RData, String> p) {
// 列名をキーに、値を返す。
return new SimpleStringProperty(p.getValue().getData(key));
}
});

//★4. TableView(表)にTableColumn(列)をセットする
table.getColumns().add(col);
}

//★5. TableView(表)にデータをセットする。
Map<String, String> data = new HashMap<String,String>();
for(int i =0; i< colNum; i++){
data.put("列"+i, "値"+i);
}
table.getItems().add(new RData().setData(data));


//参考までに、列数が半分のレコードデータもセットしてみる
Map<String, String> data2 = new HashMap<String,String>();
for(int i =0; i< colNum-5; i++){
data2.put("列"+i, "値"+i);
}
table.getItems().add(new RData().setData(data2));
}


■実行結果


以上。
スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

管理者にだけ表示を許可する

検索フォーム
プロフィール

takuan93

Author:takuan93
本ブログの説明書→「ReadMe」

管理者に連絡

カテゴリ
WiX (5)
Ant (1)
フリーエリア
最新記事
カウンター
カレンダー
06 | 2018/07 | 08
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。