TableViewを使用してJavaFXアプリケーションを構築しており、さまざまなユーザーの選択に応じて色を動的に変更したいと考えています。最初は色付きのデータを取り込むことができますが、元の色を維持しています。JavaFXが動的に色付けされたテーブルビューをリフレッシュする
: はSessionsTableView.getItems().clear();
ObservableList<SessionItem> newsessionitems = FXCollections.observableArrayList();
for (SessionPart x : AllSessionParts) {
tableitems.add(new SessionItem(count, x.name, x.getdurationasString(true, 150.0), getambiencetext(x), x.goals_getCurrentAsString(true, 150.0)));
newsessionitems.add(x);
count++;
}
SessionsTableView.setItems(newsessionitems);
メソッドが色を決定するために、私のセル値の工場でテストされている別の文字列値を返します。
これは、ユーザーが何かを変更するたびに動的に呼び出され、私の方法の基本的な機能があります
DurationColumn.setCellFactory(new Callback<TableColumn<SessionItem, String>, TableCell<SessionItem, String>>() {
@Override
public TableCell<SessionItem, String> call(TableColumn<SessionItem, String> param) {
return new TableCell<SessionItem, String>() {
@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
if (! isEmpty()) {
switch (item) {
case "No Duration Set":
setTextFill(Color.RED);
break;
case "Short Duration Set":
setTextFill(Color.YELLOW);
break;
default:
setTextFill(Color.BLACK);
break;
}
setText(item);
}
}
};
}
});
JavaFXは、初期設定時に提供されるString値に基づいてテキストに色を付けますが、再度呼び出されたときには表示されません。私のupdateitem(String、boolean)メソッドのオーバーライドが呼び出され、テキスト値が変更されますが、変更されたテキストの色も更新/更新されません。
どのように色を動的に変更するのですか?
isEmpty()がtrueの場合は、セルは無関係ですが、テキスト( 'setText(null)')をクリアする必要があります。 'updateItem(...)'メソッドが呼び出され、アイテムが変更されていることを確認したとしたら、 'case'ステートメントのいずれかを入力しているかどうか確認できますか? –
私はそれがうまくいくはずだということに同意します。 Javaは私の最初の言語ではなく、JavaFXは私が構築した最初のGUIではないので、私はまだ学んでいます。なんらかの理由で、まだ動作しません。私は、isEmpty()がsetText(null)を追加し、チェックする文字列を追加したときにcase文を入力していて、別々のcaseを正しく入力していて、テキストを変更していますが色は変更していません。 – caleb
あなたの質問を編集して[MCVE](* minimal *と* complete *に重点を置く)を含める必要があるでしょう。私は通常、これにはCSSアプローチを使用しますが、このアプローチがうまくいかない理由は明らかです。 –