"look up colors"를 사용하여 CSS에서 색상을 정의해야합니다.
자세한 내용은 JavaFX CSS reference을 참조하십시오.
보았다 업 색상 현재 노드 또는 부모의에 설정되어 다른 색상 속성을 참조 할 수 있습니다 보았다 업 색상
. 이것은 매우 강력한 기능입니다. 일반 색상 팔레트를 장면에 지정하고 응용 프로그램을 사용하는 방식으로 사용할 수 있습니다. 팔레트 색상 중 하나를 변경하려면 장면 트리의 모든 레벨에서 변경할 수 있으며 해당 노드와 그 모든 종속 항목에 영향을 미칩니다. 룩업 된 색상은 적용될 때까지 조회되지 않으므로 실시간으로 팔레트 색상을 노드의 "스타일"속성으로 바꾸는 것과 같이 발생할 수있는 스타일 변경 사항에 활발하고 반응합니다.
다음 예제에서 모든 단추의 배경색은 모두 룩업 된 색 "abc"를 사용합니다.
.root { abc: #f00 }
.button { -fx-background-color: abc }
샘플 애플리케이션
샘플 애플리케이션에서는
, 키 코드는 코드를 동적으로 고개 색상 값의 설정이다
headerColorToggleGroup.selectedToggleProperty().addListener(new ChangeListener<Toggle>() {
@Override
public void changed(
ObservableValue<? extends Toggle> observableValue,
Toggle oldToggle,
Toggle newToggle
) {
RadioButton radio = (RadioButton) newToggle;
header.setStyle("header-base-color: " + radio.getText());
}
});
header-base-color
의 정의와 함께 아래 CSS의 컬러 룩업 ID :
헤더 color.css
.root {
header-base-color: #4d4d4d;
}
#header {
-fx-background-color: header-base-color;
-fx-border-color: #545454;
-fx-border-width: 1px;
-fx-border-style: solid;
}
#header:hover {
-fx-background-color: #9ACD32;
}
헤더 color.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?scenebuilder-stylesheet header-color.css?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<?import java.net.URL?>
<BorderPane id="BorderPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="-1.0" prefWidth="-1.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="HeaderColorController">
<top>
<HBox fx:id="header" prefHeight="-1.0" prefWidth="-1.0">
<children>
<Label text="A really hard to read label" />
</children>
</HBox>
</top>
<center>
<VBox prefHeight="-1.0" prefWidth="-1.0" spacing="10.0" style="-fx-background-color: azure;">
<children>
<RadioButton mnemonicParsing="false" style="-fx-text-fill: forestgreen;" text="forestgreen">
<toggleGroup>
<ToggleGroup fx:id="headerColorToggleGroup" />
</toggleGroup>
</RadioButton>
<RadioButton mnemonicParsing="false" style="-fx-text-fill: firebrick;" text="firebrick" toggleGroup="$headerColorToggleGroup" />
<RadioButton mnemonicParsing="false" selected="true" style="-fx-text-fill: #4d4d4d;" text="#4d4d4d" toggleGroup="$headerColorToggleGroup" />
</children>
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
</VBox>
</center>
<stylesheets>
<URL value="@header-color.css" />
</stylesheets>
</BorderPane>
HeaderColorApp.java
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class HeaderColorApp extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
Parent root = FXMLLoader.load(getClass().getResource("header-color.fxml"));
primaryStage.setScene(new Scene(root));
primaryStage.show();
}
public static void main(String[] args) { launch(args); }
}
나는 생각했다
HeaderColorController.java
import java.net.URL;
import java.util.ResourceBundle;
import javafx.beans.value.*;
import javafx.fxml.FXML;
import javafx.scene.control.*;
import javafx.scene.layout.HBox;
public class HeaderColorController {
@FXML
private ResourceBundle resources;
@FXML
private URL location;
@FXML
private HBox header;
@FXML
private ToggleGroup headerColorToggleGroup;
@FXML
void initialize() {
assert header != null : "fx:id=\"header\" was not injected: check your FXML file 'header-color.fxml'.";
assert headerColorToggleGroup != null : "fx:id=\"headerColorToggleGroup\" was not injected: check your FXML file 'header-color.fxml'.";
headerColorToggleGroup.selectedToggleProperty().addListener(new ChangeListener<Toggle>() {
@Override
public void changed(ObservableValue<? extends Toggle> observableValue, Toggle oldToggle, Toggle newToggle) {
RadioButton radio = (RadioButton) newToggle;
header.setStyle("header-base-color: " + radio.getText());
}
});
}
}
한 가지 방법은 정확히 스타일이 될 것입니다 무슨의 스타일로 키와 값이 해시 맵에 CSS를 구문 분석했다. 그런 다음 해시 맵을 반복하고 큰 문자열을 만들고 setStyle을 호출합니다. –
스타일 클래스를 추가하고 그런 식으로 액세스 해 보았습니까? ... Node.getStyleClass(). add ("hover_node")'그런 다음 CSS에서 '.hover_node {-fx-background-color : # 9ACD32; }'그게 효과가 있을지 모르겠다. – WillBD