2012-11-02 6 views
1

두 개의 버튼을 스타일링하는 아주 간단한 CSS를 만들었습니다.
처음에는 방금 패딩이 추가되었습니다. 두 번째는 -fx-background-color로 설정되었지만 값은 caspian.css에서 가져온 것입니다. 즉, 설정되기 전에 가져야하는 값입니다. 초점 장식 작동이 중지 및 집중하면 두 번째 버튼은 파란색 테두리를하지 않습니다이 시점에서javafx 2, CSS 및 포커스 사라짐

.first-style { -fx-padding: 20 5 1 5; } 

.second-style { -fx-background-color: -fx-shadow-highlight-color, -fx-outer-border, -fx-inner-border, -fx-body-color; } 


내가 이상한 문제가 발생합니다.

enter image description here

무슨 일 이죠?

답변

2

보조 링에 :focused 가짜 클래스를 추가해야 포커스 링을 사용할 수 있습니다. 그렇지 않으면 두 번째 스타일의 스타일 클래스에서 버튼의 배경색을 다시 지정할 때 덮어 쓰게됩니다.

샘플 CSS :

.root { -fx-background-color: cornsilk; -fx-padding: 10; } 
.first-style { -fx-padding: 20 5 1 5; } 
.second-style { -fx-background-color: -fx-shadow-highlight-color, -fx-outer-border, -fx-inner-border, -fx-body-color; } 
.second-style:focused { -fx-background-color: -fx-focus-color, -fx-outer-border, -fx-inner-border, -fx-body-color; } 

샘플 응용 프로그램 :

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.control.*; 
import javafx.scene.layout.*; 
import javafx.stage.Stage; 

public class ButtonFocusCss extends Application { 
    public static void main(String[] args) { launch(args); } 
    @Override public void start(Stage stage) throws Exception { 
    VBox layout = new VBox(15); 
    Button b1 = new Button("B1"); 
    b1.getStyleClass().add("first-style"); 
    Button b2 = new Button("B2"); 
    b2.getStyleClass().add("second-style"); 
    layout.getChildren().addAll(b1, b2); 
    layout.getStylesheets().add(getClass().getResource("button.css").toExternalForm()); 
    stage.setScene(new Scene(layout)); 

    stage.show(); 
    } 
} 

업데이트 솔직히

자바 FX CSS 재정의 메커니즘이 방식으로 작동 정확히 이유를 설명 할 수없는, 내가있어 그 대답은 기본 값인 JavaFX 2.2 caspian.css을 검토하고 어떻게 작동하는지에 대한 직감을 따르는 것입니다. 당신이 cascading order과 같은 사항을 이해하기 위해 일반 CSS 규격을 설정해야하는이 예제의 미묘함이 있기는하지만

자바 FX CSS에 대한 응용 프로그램의 규칙의 가장 좋은 현재의 설명은, CSS를 참조 가이드 섹션 CSS and the JavaFX Scene Graph에 있으며 specifity.

+0

좋아요, 당신은 거의 "받아 들인 답"을 얻었습니다 :-). 대답을 완료 할 수있는 것은 CSS에서 덮어 쓰기가 작동하는 방식에 대한 설명입니다. 아마 내가 CSS의 초보자이기 때문에,하지만 나는 exaustive 설명을 찾을 수 없습니다. – AgostinoX

+0

JavaFX 및 일반 CSS 응용 프로그램 규칙에 대한 일부 링크가 추가되었습니다. – jewelsea

+0

괜찮 았어.하지만 그 문서에서 나는 일반적인 CSS 규칙을 찾았지 만 "부모"클래스를 무시하면 의사 클래스가 삭제되는 이유는 무엇입니까? "계단식 순서"링크에서 의사 클래스는 클래스처럼 취급됩니다. – AgostinoX