2015-01-01 1 views
1

fxml/css와 java의 (간단한) 조합입니다. 문제의 콤보 상자 (operationSelector)는 실제로 비활성화되어 있지만 불투명도는 0.4입니다 (1.0 대신 비활성화 된 노드의 기본값). this.operationSelector.getStyleClass()를 인쇄하면 싱글 톤 콤보 박스 클래스가 실제로 스타일 클래스의 일부임을 알 수 있습니다. 나는 모든 스타일 클래스를 사용하지 못하게했지만 singleton-combo-box를 시도했지만 비활성화되었을 때 불투명도는 0.4입니다. 명백하게 잘못된 점이 있습니까? FXML에서JavaFX ComboBox 스타일링 (사용 중지 된 psuedo-class)

(그건 그렇고, 내가 자바 8u40 초기 액세스를 사용하고 있습니다) :

<ComboBox fx:id="operationSelector" styleClass="singleton-combo-box" GridPane.columnIndex="1" GridPane.rowIndex="1" /> 

CSS에서 :

.singleton-combo-box:disabled { 
    -fx-opacity: 1.0; 
} 
.singleton-combo-box .list-cell:disabled { 
    -fx-opacity: 1.0; 
    -fx-text-fill: black; 
} 

자바에서 :

여기
@FXML private ComboBox<String> operationSelector; 

    @FXML 
    private void initialize() 
    { 
      this.operationSelector.setDisable(true); 
    } 

은이다 결과 :

민간 API를 사용하여이 작업을 수행하는 방법이있다 eckig에 의해 제안

+1

나를 위해 잘 작동합니다. Scene Builder에서 확인해 보셨습니까? 콤보를 비활성화로 표시하면 불투명도가 1.0으로 설정되어야합니다 (파란색 기호 표시). 그렇지 않으면 당신은 적절한 CSS 파일을로드하지 않고있다. –

+0

이것이 당신에게 효과적이라는 것을 알게되면서 나는 이것을 일으킬 수있는 것에 더 깊이 파고 들었다. 이 콤보 상자는 Dialog에 실제로 있음을 알았습니다. (비록 'initOwner'가 스타일 시트 세트와 함께 씬에 의해 소유 된 대화 상자를 만드는데 사용되었지만) 대화 상자에 스타일 시트가 명시 적으로 설정되어 있지는 않지만, 같은 : 'newProfileConditionDialog.getDialogPane() getStylesheets() 추가 (this.getClass()의 getResource (MainWindow.getUniversalStylesheet()) toExternalForm()..),'그런 스타일이 combo-에 대한 올바른했다.. newProfileConditionDialog 내부의 상자. – brcolow

+1

'StyleManager.getInstance(). addUserAgentStylesheet()'를 사용하여 글로벌 스타일 시트를 등록 할 수 있습니다. 하지만 내부 API입니다 .. – eckig

답변

1

(이 com.sun는 *.) : 연구의 조금 나는 조나단 자일스에 의해 제안을 발견

StyleManager.getInstance().addUserAgentStylesheet(url) 

(UI 컨트롤 그는 민간 API를 직접 사용하지 않고이 작업을 수행하는 방법을 보여 오라클의 자바 FX 팀)에서 기술 리더 :

Application.setUserAgentStylesheet(url) 

이 방법은 전체 응용 프로그램에 대한 보편적 인 스타일 시트를 설정하는 가장 좋은 방법되어야한다 (모든 무대와 장면).

관련 문제