マルチカラー行(低優先度の場合はcolor1、中優先度の場合はcolor2など)でJavaFxTableViewを作成する必要があります。 CellFactoryを作成しました
public class TaskCellFactory implements Callback<TableColumn, TableCell> {
@Override
public TableCell call(TableColumn p) {
TableCell cell = new TableCell<Task, Object>() {
@Override
public void updateItem(Object item, boolean empty) {
super.updateItem(item, empty);
setText(empty ? null : getString());
setGraphic(null);
TableRow currentRow = getTableRow();
Task currentTask = currentRow == null ? null : (Task)currentRow.getItem();
if(currentTask != null){
Priority priority = currentTask.getPriority();
clearPriorityStyle();
if(!isHover() && !isSelected() && !isFocused()){
setPriorityStyle(priority);
}
}
}
@Override
public void updateSelected(boolean upd){
super.updateSelected(upd);
System.out.println("is update");
}
private void clearPriorityStyle(){
ObservableList<String> styleClasses = getStyleClass();
styleClasses.remove("priorityLow");
styleClasses.remove("priorityMedium");
styleClasses.remove("priorityHigh");
}
private void setPriorityStyle(Priority priority){
switch(priority){
case LOW:
getStyleClass().add("priorityLow");
break;
case MEDIUM:
getStyleClass().add("priorityMedium");
break;
case HIGH:
getStyleClass().add("priorityHigh");
break;
}
System.out.println(getStyleClass());
}
private String getString() {
return getItem() == null ? "" : getItem().toString();
}
};
return cell;
} }
およびcss
.priorityLow{ -fx-background-color: palegreen; }
.priorityMedium{ -fx-background-color: skyblue;}
.priorityHigh{ -fx-background-color: palevioletred;}
しかし、私はまだ選択した行を強調表示する必要があります。どうやってやるの?
Cssのセル全体の背景色を設定する代わりに、-fx-control-inner-backgroundを設定するだけです。その後、デフォルトのアクセント、ホバー、フォーカスリングを引き続き使用できます。もちろん、setPriorityStyle
呼び出しの周りのifステートメントも削除してください。
デフォルトのアクセント(選択された)色やホバー色などもオーバーライドしたい場合は、以下のcssのようにこれを行うこともできます-ハイライトオーバーライドが本当に推奨されているかどうかはわかりませんが、アプリと必要なユーザーエクスペリエンス。
.priorityLow {
-fx-control-inner-background: palegreen;
-fx-accent: derive(-fx-control-inner-background, -40%);
-fx-cell-hover-color: derive(-fx-control-inner-background, -20%);
}
.priorityMedium {
-fx-control-inner-background: skyblue;
-fx-accent: derive(-fx-control-inner-background, -40%);
-fx-cell-hover-color: derive(-fx-control-inner-background, -20%);
}
.priorityHigh {
-fx-control-inner-background: palevioletred;
-fx-accent: derive(-fx-control-inner-background, -40%);
-fx-cell-hover-color: derive(-fx-control-inner-background, -20%);
}
JavaFXの詳細なスタイリング情報は、JavaFX 2.2のデフォルト caspian.cssスタイルシート および JavaFX 2 CSSリファレンスガイド にあります。ご使用のバージョンのJavaFXのcaspian.cssを見つけるには、jfxrt.jar
(jre/libディレクトリにある場合もあります)を解凍します。