javafxのカスタムセルファクトリを使用して、現在の時刻とチェック時間に基づくアラートステータスに基づいてセルをスタイルします。javafxのカスタムセルファクトリを使用したフェードトランジション
すべて正常に動作しますが、フェードトランジションなどを追加して、チェックタイムを変更して確認応答が出るまで行を実質的に点滅させます。
私がのために多くのコードを追加することができると思うよりも少し複雑ですので、私は私のセルファクトリクラスを掲載する予定
public class FormattedTableCellFactory<S, T> implements Callback<TableColumn<S, T>, TableCell<S, T>> {
private TableCell<S, T> cell = null;
private FadeTransition ft;
public FormattedTableCellFactory() {
}
@Override
public TableCell<S, T> call(TableColumn<S, T> p) {
cell = new TableCell<S, T>() {
@Override
protected void updateItem(Object item, boolean empty) {
super.updateItem((T) item, empty);
// CSS Styles
String cssStyle;
Person person = null;
if(getTableRow() != null) {
person = (Person) getTableRow().getItem();
}
ft = new FadeTransition(Duration.millis(500), cell);
ft.setFromValue(1.0);
ft.setToValue(0.1);
ft.setCycleCount(Timeline.INDEFINITE);
ft.setAutoReverse(true);
//Remove all previously assigned CSS styles from the cell.
//Determine how to format the cell based on the status of the container.
if(person != null){
switch(PersonAlert.getAlert(person)){
case WARNING:
ft.stop();
cssStyle = "warning";
break;
case PAST_DUE:
ft.stop();
cssStyle = "pastdue";
break;
case ERC_PAST_DUE:
ft.stop();
cssStyle = "ercpastdue";
break;
case OVERDUE:
ft.playFromStart();
cssStyle = "overdue";
break;
case OVERNIGHT:
ft.stop();
cssStyle = "overnight";
break;
default:
ft.stop();
cssStyle = "normal";
break;
}
}else{
ft.stop();
setText("");
return;
}
//Set the CSS style on the cell and set the cell's text.
getStyleClass().setAll(cssStyle);
if(item != null) {
setText(item.toString());
}else{
setText("");
}
}
};
return cell;
}
}
人が特定のステータスを持っている時はいつでもこのコードは、正常に動作します細胞の色が適切に変化する。ここでの唯一の問題はフェードトランジションです。最初に実行されるたびにフェードトランジションはうまく動作しますが、別のスタイルに変更すると、停止せずに点滅し続けます。
フェードトランジションを停止できません。これは、このupdateItemが呼び出されるたびに、フェードトランジションの新しいインスタンスが作成されるため、stopを呼び出すと、それが現在のトランジションで呼び出され、以前のトランジションでは呼び出されないからです。私は上のトランジションを初期化することでこれを取り除こうとしましたが、それでも点滅しません。
私はこれを編集して、ストップが呼び出されたときにフェードトランジションを停止する方法、またはセルファクトリを使ってセル/行を「点滅」させる方法がありますか?
YES:それはあなたがテストするために任意のコードを提供しなかったとして、私がテストすることは不可能だが
だから、あなたはおそらく、これらの線に沿って何かをしたいです!これはまさに私が欲しいものです。私は間違ってフェードトランジションを作成していることを知っていましたが、それを正しく行う方法を理解できませんでした。どうもありがとうございました。 –
セルの実装としてスタンドアロンクラスを作成し、その列にセルファクトリを設定するときにラムダ式を使用するだけでは、おそらくもっとうれしいでしょう。私。あなたが 'someColumn.setCellFactory(p - > new FormattedTableCell());'(またはその列にどのような型を持っていても)を実行するだけで使用すると、 'public class FormattedTableCell はTableCellを拡張します。少なくとも、2レベルのインデントを保存します。 –
fxmlにcellFactoryを設定しています。それが何か変わるかどうかはわかりません。 –