15

マルチカラー行(低優先度の場合は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;}

しかし、私はまだ選択した行を強調表示する必要があります。どうやってやるの?

4

1 に答える 1

18

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 を見つけるには、unjar を使用できますjfxrt.jar(jre/lib ディレクトリにある場合もあります)。

アップデート

JavaFX のデフォルトのスタイルシートmodena.cssは、caspian.css.

于 2012-12-04T08:26:09.120 に答える