2012-11-26 4 views
20

JavaFX 런타임 라이브러리에서 Oracle이 배포 한 "caspian.css"를 검사 해 보았습니다. 일부 색상 값을 변수로 선언 한 것을 볼 수 있습니다. 예 :JavaFX CSS 파일에서 변수 선언하기

다음
-fx-base: #d0d0d0; // Caspian.css, Line 47 

... 그들은 같은 다른 특성의 값으로 사용 : 측정 단위를 선언하려면 지금

-fx-color: -fx-base; // Caspian.css, Line 96 

, 제가하고 싶은 것은 (-fx-radius-default: 10px) 다음 컨트롤의 반경을 설정할 때마다 사용하십시오.

-fx-border-radius: -fx-radius-default; 
-fx-background-radius: -fx-radius-default; 

나는 지금까지 성공하지 못했습니다. 내 질문은 : 이것은 가능합니까?


편집 : 추가 실험 정보

세부 여기

내가 자바 FX 장면 빌더에 1.1을 만들어 내 Experiment.fxml 파일입니다

<?xml version="1.0" encoding="UTF-8"?> 

<?import java.lang.*?> 
<?import java.net.*?> 
<?import java.util.*?> 
<?import javafx.scene.control.*?> 
<?import javafx.scene.layout.*?> 
<?import javafx.scene.paint.*?> 

<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml"> 
    <children> 
    <TextArea layoutX="200.0" layoutY="119.0" prefWidth="200.0" styleClass="track" wrapText="true" /> 
    </children> 
    <stylesheets> 
    <URL value="@css/Experiment.css" /> 
    </stylesheets> 
</AnchorPane> 

그리고 아래입니다 css/Experiment.css 내가 사용한 :

* { 
    -fx-radius-default: 10px; 
} 
.track { 
    -fx-border-radius: -fx-radius-default; 
    -fx-border-color: black; 
} 

불행하게도이 같은 오류 메시지를주고, 작동하지 않습니다

규칙에서 '-fx 국경 반경'에 대한 조회를 해결하면서 '-fx 반경 기본'을 확인할 수 없습니다 '* .track'스타일 시트 파일 : /home/abdullah/codebase/src/package/css/Experiment.css

나는 일반 구문 (-fx-border-radius: 10px)를 사용하는 경우

, 그건 아무 문제가 없다.

내가 뭘 잘못하고 있니?


편집 : 결론

결론 : 불가능

"만을 언급"JavaFX CSS Reference Guide "때문에, 자바 FX의 현재 버전 불가능 내가 찾던 것 looked- "변수"의 일반적인 개념이 아닙니다. 그래도 좋은 기능이 될 것입니다 ... 그냥 말하면 ...

+0

구현하기가 쉽지 않은지 모르지만 현재는 자신의 CSS 속성을 정의하는 JavaFX의 클래스가'javafx.css.CssMetaData' 클래스를 사용하는 것처럼 보입니다. –

답변

22

불행히도 그것은 색상에만 작동하는 것 같습니다. 나는 그것이 아주 오래된 질문입니다 알고 있지만 난 내와 유사한 방식으로 어떤 답을 찾을 수 없습니다

* { 
    -fx-base2: #e00; 
} 
.track {-fx-background-color: -fx-base2;} 
+0

내 세부 정보를 추가했습니다. 당신의 대답 후에 질문하십시오. 그것을 검토 할 수 있습니까? 감사. –

+0

업데이트 됨, 색 상수 만 허용됩니다. –

+0

나는 [OTN JavaFX2 forums] (https://forums.oracle.com/forums/message.jspa?messageID=10712718)에서도 같은 질문을했습니다. 다른 사람이 긍정적 인 답변 (또는 해결 방법)을 제공하지 않으면 귀하의 답변을 수락합니다. 답장을 보내 주셔서 감사합니다. –

5

:하지만 당신은 당신의 변수를 사용하여 규칙에서 "볼 수"는 것을 확인해야합니다. 이전의 대답은 이미 색상을 제외하고는 표준 CSS에서는 가능하지 않다고 말한다.(제발 내가 틀렸다면 수정하십시오)

less을 사용하는 경우에도 가능합니다. 내 JavaFX 프로젝트 중 하나에서 사용하는 것이 적어서 정말 잘 작동합니다. 적은 파일을 컴파일하고 실제 css 파일을 생성하도록 빌드 프로세스를 구성하기 만하면됩니다. 내 프로젝트에서 maven을 사용했고 아래에서 빌드 구성을 찾을 수 있습니다.

<build> 
    <!-- exclude less files from output directory --> 
    <resources> 
     <resource> 
      <directory>src/main/resources</directory> 
      <excludes> 
       <exclude>**/*.less</exclude> 
      </excludes> 
     </resource> 
    </resources> 

    <plugins> 

     <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.3</version> 
      <configuration> 
       <source>1.8</source> 
       <target>1.8</target> 
      </configuration> 
     </plugin> 

     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-resources-plugin</artifactId> 
      <version>3.0.2</version> 
     </plugin> 

     <plugin> 
      <groupId>com.zenjava</groupId> 
      <artifactId>javafx-maven-plugin</artifactId> 
      <version>8.7.0</version> 
      <configuration> 
       <mainClass>com.example.project.Main</mainClass> 
      </configuration> 
     </plugin> 

     <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <configuration> 
       <archive> 
        <manifest> 
         <mainClass>com.example.project.Main</mainClass> 
        </manifest> 
       </archive> 
       <descriptorRefs> 
        <descriptorRef>jar-with-dependencies</descriptorRef> 
       </descriptorRefs> 
       <appendAssemblyId>false</appendAssemblyId> 
      </configuration> 
     </plugin> 

     <!-- maven less plugin which I'm using to compile the less files --> 
     <plugin> 
      <groupId>biz.gabrys.maven.plugins</groupId> 
      <artifactId>lesscss-maven-plugin</artifactId> 
      <version>1.2.1</version> 
      <executions> 
       <execution> 
        <goals> 
         <goal>compile</goal> 
        </goals> 
        <configuration> 
         <sourceDirectory>${project.basedir}/src/main/resources/com/example/project</sourceDirectory> 
         <outputDirectory>${project.build.outputDirectory}/com/example/project</outputDirectory> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

이 구성으로 이제는 더 적은 기능을 사용할 수 있으며 사용자 지정 변수를 정의하는 데 문제가 없습니다. 나는 color-catalogue.less 파일을 내 프로젝트에 사용합니다. 다른 모든 파일은 import 속성을 통해 가져올 수 있습니다. 어쩌면이 솔루션은 누구에게나 도움이 될 것입니다.


편집 : 사람이 관심이 있다면, 작업의 예 here를 찾을 수 있습니다.

+0

은 작고 변수가 적은 작업 샘플을 만들어 github에 업로드하면 좋을 것입니다. 어떻게 생각하니? 감사합니다 – Marckaraujo

+1

내 대답을 업데이트했습니다. – grill2010