보조 링에 :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.
좋아요, 당신은 거의 "받아 들인 답"을 얻었습니다 :-). 대답을 완료 할 수있는 것은 CSS에서 덮어 쓰기가 작동하는 방식에 대한 설명입니다. 아마 내가 CSS의 초보자이기 때문에,하지만 나는 exaustive 설명을 찾을 수 없습니다. – AgostinoX
JavaFX 및 일반 CSS 응용 프로그램 규칙에 대한 일부 링크가 추가되었습니다. – jewelsea
괜찮 았어.하지만 그 문서에서 나는 일반적인 CSS 규칙을 찾았지 만 "부모"클래스를 무시하면 의사 클래스가 삭제되는 이유는 무엇입니까? "계단식 순서"링크에서 의사 클래스는 클래스처럼 취급됩니다. – AgostinoX