2014-01-08 2 views
0

caspian.css를 기반으로 CSS 스타일 시트를 만들었습니다. 내 질문에 기본 스킨으로 새 CSS 스킨을로드 할 수 있습니까?기본 스킨 용 CSS 파일 설정

또한 런타임 중에 어떻게 스킨을 변경할 수 있습니까?

답변

1

Scene 또는 Parent에 스타일 시트를 직접 추가하여 노드 및 모든 뒤끝에 적용 할 수 있습니다. 두 클래스는 모두 getStylesheets()이고 ObservableList<java.lang.String>을 반환하며 객체에 적용된 스타일 시트 중 URL을 포함합니다. 이 목록을 수정하십시오!

fxml을 사용하는 경우 스타일 시트를 지정할 수도 있습니다 (물론 초기 스타일 시트 만 설정합니다).

다음은 장면 작성시 스타일 시트를 추가하는 방법의 예입니다. 물론 언제든지 목록에서 스타일 시트를 제거하고 다른 스타일 시트를 추가 할 수 있습니다. Style.css은 여기에 추가하려는 스타일 시트이며 a.b 스타일 시트가 포함 된 패키지입니다.

// Load some content from some fxml file; Style.css not added there 
Parent parent = (Parent) fxmlLoader.load(
     getClass().getResourceAsStream("MainFrame.fxml")); 

// create scene with content 
Scene scene = new Scene(parent); 
// alternatively use Node.getScene() for any node to get the scene  

// add the stylesheet 
scene.getStylesheets().add(
      getClass().getClassLoader().getResource("a/b/Style.css").toString()); 
// ... 

ObservableList<T>java.util.List<T> 확장하고 쉽게 사용할 수 있어야합니다.




때로는 예상대로 동작하지 않을 수도 있습니다. 예 : 콤보 박스를 클릭하면 콤보 박스가 보이지 않으며 장면의 루트 노드에서이 노드까지의 경로는 루트 노드 만 공유해야합니다. 따라서 combobox가 포함 된 창에 스타일 시트를 추가하면 (장면의 루트 노드가 아닌 경우) 팝업 스타일이 적용되지 않습니다.

다음 그림은 스타일이 지정된 팝업창이있는 콤보 상자의 스크린 샷입니다. 이는 ComboBox가 포함 된 AnchorPane 대신 css 파일이 장면에 추가 되었기 때문에 작동합니다. 색상을 지정할 항목에 대해 다른 CSS 클래스를 사용했습니다. 이 내가

.indexed-cell.class-value-bad-1 { 
    -fx-background-color: orange; 
} 

.indexed-cell.class-value-good-1 { 
    -fx-background-color: forestgreen; 
} 

.indexed-cell.class-value-normal { 
    -fx-background-color: white; 
} 
+0

모든 코드 예제하시기 바랍니다 사용되는 스타일 클래스입니다

Combobox Popup

(빨간색 RECT와 텍스트는 물론 내 응용 프로그램의 일부가 아닌)? –

+0

@PeterPenzov : 코드 예를 추가했습니다. 희망이 도움이됩니다. – fabian

+0

마지막으로 한 가지. 어떻게하면 콤보 상자로 이것을 할 수 있고 런타임 중에 그것을 바꿀 수 있습니까? –