2012-12-04 21 views
14

多色の行(低優先度の場合はcolor1、中優先度の場合はcolor2など)でJavaFx TableViewを作成する必要があります。私はJavaFXテーブルビューの色

.priorityLow{ -fx-background-color: palegreen; } 
.priorityMedium{ -fx-background-color: skyblue;} 
.priorityHigh{ -fx-background-color: palevioletred;} 

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を作成しているが、私はまだ、選択した行を強調表示する必要があります。どうやってやるの?

答えて

17

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%); 
} 

rowhighlight


JavaFXのための詳細なスタイル情報は、JavaFXの2.2のデフォルトcaspian.css stylesheetJavaFX 2 CSS reference guideに見出すことができます。お使いのJavaFXのバージョンに対応するcaspian.cssを見つけるには、jfxrt.jar(jre/libディレクトリにあることがあります)をunjarできます。

+1

)あなたは答えることができます、これらのCSSプロパティ(-fx-control-inner-background、-fx-accentなど)やサンプルのリストはどこから手に入りますか? –

+0

これらのリソースを指すように更新されました。 – jewelsea

+0

私は別の質問があります:同様に行内の単一セルを強調表示できますか? –

関連する問題