2012-12-04 3 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


자바 FX에 대한 자세한 스타일링 정보는 자바 FX 2.2과 JavaFX 2 CSS reference guide의 기본 caspian.css stylesheet에서 찾을 수 있습니다. JavaFX 버전에 맞는 caspian.css를 찾으려면 jfxrt.jar (때때로 jre/lib 디렉토리에 있음)을 unjar 할 수 있습니다.

+1

) 감사합니다.이 CSS 속성 (-fx-control-inner-background, -fx-accent와 같은) 또는 샘플의 목록을 어디서 찾을 수 있습니까? –

+0

이 리소스를 가리 키도록 업데이트되었습니다. – jewelsea

+0

또 다른 질문이 있습니다. 마찬가지로 비슷한 셀을 강조 표시 할 수 있습니까? –