<AI>
JavaFXの TableView で特定の1行のデータを書き換える(再描画する)方法と、特定のカラム(セル)の文字色を変更する方法について解説します。
1. 1行単位のデータを書き換える方法
データを保持するモデルクラス(エンティティ)のプロパティに Property クラス(StringProperty, IntegerProperty など)
を使用している場合、値を set() するだけで TableView に自動反映されます。
java
// 例:モデルクラスが name, age をプロパティで持っている場合
MyData rowData = tableView.getItems().get(targetIndex);
rowData.getNameProperty().set("新しい名前"); // 自動的にTableViewが更新される
rowData.getAgeProperty().set(30);
※注意: 文字列(String)などの通常のオブジェクト型を直接代入している場合
set を呼び出しても変更が検知されません。該当行のデータを ObservableList から一度取り出して置き換える必要があります。
java
MyData newData = new MyData("新しい名前", 30);
tableView.getItems().set(targetIndex, newData);
2. カラムの文字色を変更する方法
カラム(セル)の文字色を変更するには、対象の TableColumn に setCellFactory を設定し、
updateItem メソッド内で条件に合わせて setTextFill() を呼び出します。
以下のサンプルは「年齢(age)が20歳未満なら文字色を赤、それ以外は黒」にする例です。
java
import javafx.scene.control.TableCell;
import javafx.scene.control.TableColumn;
import javafx.scene.paint.Color;
TableColumn ageColumn = new TableColumn<>("年齢");
ageColumn.setCellFactory(column -> {
return new TableCell() {
@Override
protected void updateItem(Integer age, boolean empty) {
super.updateItem(age, empty);
if (empty || age == null) {
setText(null);
setTextFill(Color.BLACK); // 空行時のリセット
} else {
setText(String.valueOf(age));
// 1行単位の条件分岐:20歳未満なら赤文字にする
if (age < 20) {
setTextFill(Color.RED);
} else {
setTextFill(Color.BLACK);
}
}
}
};
});
さらに詳しい情報
セルの高度なカスタマイズやCSS適用の詳細については、
PragmaticCodingのTableViewスタイリングガイド が役立ちます。
また、文字色の変更に関するコミュニティでの議論は
Stack Overflow - JavaFX TableViewの文字色変更に関するスレッド でも確認できます。