상태에 따라 테이블의 행에 색을 지정하고 싶습니다. 수색 후에 나는 이것을 Formatting Rows in a JavaFX TableView Using CSS Pseudo Classes이라고 발견했습니다.Javafx tableview changelistener가 자주 변경됨
제 목적으로 구현하려고했습니다. 또한 작동하지만 스크롤하면 기본 색상으로 다시 변경됩니다.
무엇이 잘못 되었나요?
@FXML
private void initialize(){
PseudoClass online = PseudoClass.getPseudoClass("online");
PseudoClass offline = PseudoClass.getPseudoClass("offline");
PseudoClass unknown = PseudoClass.getPseudoClass("unknown");
//Set a rowFactory for the table view.
overviewTable.setRowFactory(tableView -> {
TableRow<State> row = new TableRow<>();
ChangeListener<String> changeListener = (obs, oldValue, newValue) -> {
System.out.println("1: " + obs + " : " + oldValue + " : " + newValue);
row.pseudoClassStateChanged(online, newValue.equals("online"));
row.pseudoClassStateChanged(offline, newValue.equals("offline"));
row.pseudoClassStateChanged(unknown, newValue.equals("unknown"));
};
row.itemProperty().addListener((obs, oldValue, newValue) -> {
System.out.println("2: " + obs + " : " + oldValue + " : " + newValue);
if (oldValue != null) {
oldValue.stateProperty().removeListener(changeListener);
}
if (newValue != null) {
newValue.stateProperty().addListener(changeListener);
row.pseudoClassStateChanged(online, newValue.equals("online"));
row.pseudoClassStateChanged(offline, newValue.equals("offline"));
row.pseudoClassStateChanged(unknown, newValue.equals("unknown"));
} else {
row.pseudoClassStateChanged(online, false);
row.pseudoClassStateChanged(offline, false);
row.pseudoClassStateChanged(unknown, false);
}
});
return row;
});
}
CSS :
.table-row-cell:unknown{
-fx-background-color: blue;
}
.table-row-cell:online{
-fx-background-color: #2EAB15;
}
.table-row-cell:offline{
-fx-background-color: #BB0000;
}
.table-row-cell .text{
-fx-fill: white;
}
"하지만 스크롤하면 기본 색상으로 다시 변경됩니다." 이게 무슨 뜻이야? 가상 클래스가 변경되고 있습니까 (IE : 당신은 syso를 얻고 있습니까)? 의사 클래스는 여전히 동일하지만 색상이 바뀌고 있습니까? – Ironcache