2012-11-26 39 views
20

Tôi đã kiểm tra "caspian.css" được phân phối bởi Oracle trong thư viện thời gian chạy JavaFX, và tôi thấy chúng đã khai báo một số giá trị màu làm biến. Ví dụ:Khai báo biến trong tệp JavaFX CSS

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

... và sau đó họ đã sử dụng nó như là giá trị của một số tài sản khác, như:

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

Bây giờ, những gì tôi muốn làm là để khai báo một đơn vị đo lường (-fx-radius-default: 10px) và sau đó sử dụng nó mọi lúc tôi cần phải đặt bán kính của một điều khiển, ví dụ:

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

Tôi đã không thành công cho đến nay. Câu hỏi của tôi là: Liệu điều này có thể được không?


Edit: Thêm chi tiết thí nghiệm

Chi tiết

Đây là tập tin Experiment.fxml của tôi mà tôi tạo ra trên JavaFX Scene Builder 1.1:

<?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> 

Và dưới đây là css/Experiment.css mà tôi đã sử dụng:

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

Thật không may này không hoạt động, đưa ra một thông báo lỗi như thế này:

Không thể giải quyết '-fx-bán kính mặc định' trong khi giải quyết các tra cứu cho '-fx-border-radius' khỏi ách thống trị '* .track' trong tập tin stylesheet: /home/abdullah/codebase/src/package/css/Experiment.css

Nếu tôi sử dụng cú pháp đơn giản (-fx-border-radius: 10px), không có vấn đề với điều đó.

Tôi đang làm gì sai ở đây?


Edit: Kết luận

Kết luận: Không thể

Có vẻ như những gì tôi đang tìm kiếm là không thể với phiên bản hiện tại của JavaFX, vì "JavaFX CSS Reference Guide" chỉ đề cập đến "looked- lên màu ", và không phải là khái niệm chung của" biến ". Nó sẽ là một tính năng tốt, mặc dù ... Chỉ cần nói ...

+0

Tôi không biết liệu việc triển khai có dễ dàng hay thực tế hay không, nhưng hiện tại có vẻ như các lớp JavaFX xác định thuộc tính css của riêng họ sử dụng lớp 'javafx.css.CssMetaData' –

Trả lời

22

Thật không may có vẻ như nó chỉ hoạt động với màu sắc. Nhưng bạn cần phải đảm bảo rằng biến của bạn là "nhìn thấy" khỏi ách thống trị trong đó sử dụng nó:

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

Tôi đã thêm một số chi tiết vào câu hỏi sau câu trả lời của bạn. Bạn có thể xem lại nó không? Cảm ơn. –

+0

được cập nhật, có vẻ như chỉ cho phép các hằng số màu. –

+0

Tôi đã hỏi cùng một câu hỏi trên [diễn đàn JavaFX2 OTN] (https://forums.oracle.com/forums/message.jspa?messageID=10712718). Nếu không ai khác đi kèm với một câu trả lời tích cực (hoặc một workaround), tôi sẽ chấp nhận câu trả lời của bạn. Cảm ơn vì đã trả lời. –

5

Tôi biết đó là một câu hỏi khá cũ nhưng tôi không thể tìm thấy bất kỳ câu trả lời với một cách tiếp cận tương tự như tôi. Như câu trả lời trước đó đã nói rằng nó không phải là có thể với css tiêu chuẩn ngoại trừ màu sắc.(Vui lòng sửa tôi nếu tôi sai)

Tuy nhiên, có thể nếu bạn đang sử dụng less. Tôi sử dụng ít hơn một trong các dự án JavaFX của mình và nó hoạt động thực sự tốt. Bạn chỉ cần cấu hình quá trình xây dựng của bạn để biên dịch các tệp ít hơn của bạn và tạo các tệp css thực tế. Tôi đã sử dụng maven trong dự án của tôi và dưới đây bạn có thể tìm thấy cấu hình xây dựng của tôi.

<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> 

Với cấu hình này, tôi hiện có thể sử dụng ít hơn và không có vấn đề gì để xác định biến tùy chỉnh. Tôi sử dụng tệp màu-catalogue.less trong dự án của tôi mà tất cả các tệp ít khác có thể nhập thông qua thuộc tính nhập. Có lẽ giải pháp này giúp mọi người.


Sửa: Nếu có ai quan tâm, một tấm gương làm việc có thể được tìm thấy here.

+0

sẽ được tốt đẹp nếu bạn tạo một mẫu làm việc với ít hơn và biến và tải nó lên github. Bạn nghĩ gì? cảm ơn – Marckaraujo

+1

Tôi đã cập nhật câu trả lời của mình. – grill2010