我试图实现的场景是,
每当一个特定TableCell的TableRow被更新,该行的颜色会变为红色,并在3秒后的颜色应自动恢复到原来的。
下面是MCVE,
主类
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.stage.Stage;
public class TestProjectWin10 extends Application {
private final ObservableList<Element> data = FXCollections.observableArrayList();
public final Runnable changeValues = () -> {
int i = 0;
while (i <= 100000) {
if (Thread.currentThread().isInterrupted()) {
break;
}
data.get(0).setOccurence(System.currentTimeMillis());
data.get(0).count();
i = i + 1;
}
};
private final ExecutorService executor = Executors.newSingleThreadExecutor(runnable -> {
Thread t = new Thread(runnable);
t.setDaemon(true);
return t;
});
@Override
public void start(Stage primaryStage) {
TableView<Element> table = new TableView<>();
table.getStylesheets().add(this.getClass().getResource("tableColor.css").toExternalForm());
table.setEditable(true);
TableColumn<Element, String> nameCol = new TableColumn<>("Name");
nameCol.setPrefWidth(200);
nameCol.setCellValueFactory(cell -> cell.getValue().nameProperty());
nameCol.setCellFactory((TableColumn<Element, String> param) -> new ColorCounterTableCellRenderer(table));
table.getColumns().add(nameCol);
this.data.add(new Element());
}
这是什么问题..?
我检查当前时间和更新发生时间之间的差异是否小于 3 秒 - 行颜色为红色(在ColorCounterTableCellRenderer
-updateItem
方法中)
在单独的计时器 ( ColorCounterTableCellRenderer
) 中,我尝试检查当前时间和更新发生时间之间的差异是否超过 3 秒 - 去除红色。
但是在计时器(createTimer
- 方法)代码中:tr.getItem()
总是null
,因此不会删除红色。
这是实现我想要的正确方法吗?为什么tr.getItem()
返回null
。
测试:我运行代码并等待executor
代码结束并检查红色是否在 3 秒后被移除。
慕姐8265434
相关分类