ฉันมีเหตุการณ์ 2 ชุดที่เปลี่ยนรูปลักษณ์ของแถวในตาราง
- ตารางจะกะพริบเมื่อมีเงื่อนไขบางอย่างกะพริบ
- ตารางที่เน้นเมื่อมีการเพิ่มรายการใหม่
สมมติว่า TableView
ของฉันชื่อ table
โครงสร้างโค้ดของฉันจะเป็นดังนี้:
TableView<Trade> table = ... ;
table.setRowFactory( private final BooleanBinding itemIsNewTrade = Bindings.isNotNull(itemProperty()).and(Bindings.equal(itemProperty(), recentlyAddedTrade));
{
// anonymous constructor:
itemIsNewTrade.addListener((obs, wasNew, isNew) -> pseudoClassStateChanged(newTradePseudoClass, isNew));
}
tv -> {
TableRow<Trade> row = new TableRow<>();
Timeline flasher = new Timeline(
new KeyFrame(Duration.seconds(0.5), e -> {
row.pseudoClassStateChanged(flashHighlight, true);
}),
new KeyFrame(Duration.seconds(1.0), e -> {
row.pseudoClassStateChanged(flashHighlight, false);
})
);
flasher.setCycleCount(Animation.INDEFINITE);
ChangeListener<Boolean> cautionListener = (obs, cautionWasSet, cautionIsNowSet) -> {
if (cautionIsNowSet) {
flasher.play();
} else {
flasher.stop();
row.pseudoClassStateChanged(flashHighlight, false);
}
};
row.itemProperty().addListener((obs, oldItem, newItem) -> {
if (oldItem != null) {
oldItem.cautionProperty().removeListener(cautionListener);
}
if (newItem == null) {
flasher.stop();
row.pseudoClassStateChanged(flashHighlight, false);
} else {
newItem.cautionProperty().addListener(cautionListener);
if (newItem.cautionProperty().get()) {
flasher.play();
} else {
flasher.stop();
row.pseudoClassStateChanged(flashHighlight, false);
}
}
});
return row ;
}
);
อัปเดต: รหัสสำหรับการกะพริบตารางมาจากที่นี่ ในขณะที่โค้ดสำหรับการไฮไลต์ตารางมาจากที่นี่ ฉันพยายามรวมทั้งสองเข้าด้วยกันโดยมีโครงสร้างเหมือนด้านบน
แต่ฉันได้รับข้อผิดพลาด ฉันไม่รู้ว่าจะรวมชนชั้นภายในที่ไม่เปิดเผยตัวตนและนิพจน์แลมบ์ดาเข้าด้วยกันได้อย่างไร
ฉันจะเอาชนะสิ่งนี้ได้อย่างไร?