2013-04-26 43 views
6

Tôi muốn thêm tệp CSS nằm ở đâu đó trên hệ thống tệp. Mục đích là viết một ứng dụng mà người dùng có thể thêm các tệp CSS JavaFX (được tạo bởi bất kỳ ai và ở bất kỳ nơi nào) một cách động.
tôi đã cố gắng một cái gì đó như thế, chỉ để thử nghiệm, để xem nếu động thêm vào file CSS công trình:Tự động thêm tệp định kiểu CSS trong JavaFX

public class Main extends Application { 

    @Override 
    public void start(Stage primaryStage) throws Exception{ 
     Label label = new Label("Hello"); 
     Scene scene = new Scene(label); 

     //file would be set by an file chosser 
     File file = new File("C:/test.css"); 
     scene.getStylesheets().add(file.getAbsolutePath()); 

     primaryStage.setTitle("Title"); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 


    public static void main(String[] args) { 
     launch(args); 
    } 
} 

Nhưng tôi nhận được luôn là những lỗi tương tự:

WARNING: com.sun.javafx.css.StyleManager loadStylesheetUnPrivileged Resource "C:\test.css" not found. 

Làm thế nào tôi có thể sửa chữa nó?

Trả lời

11

Vấn đề của bạn là bạn không sử dụng URL. Here bạn có thể tìm thêm tài liệu về cách CSS được tải cùng với tham chiếu CSS.

Nếu bạn có URL như một String bạn có thể thiết lập các CSS động với một tập tin bên ngoài như vậy:

private boolean isANext = true; 

public void start(Stage primaryStage) throws Exception { 
    Button button = new Button("Change CSS"); 
    VBox vbox = new VBox(10); 
    vbox.setAlignment(Pos.CENTER); 
    vbox.getChildren().add(button); 
    scene = new Scene(vbox, 200, 200); 

    button.setOnAction(ev -> { 
     // Alternate two stylesheets just for this demo. 
     String css = isANext ? "file:///C:/temp/a.css" : "file:///C:/temp/b.css"; 
     isANext = !isANext; 
     System.out.println("Loading CSS at URL " + css); 

     scene.getStylesheets().clear(); 
     scene.getStylesheets().add(css); 
    }); 

    primaryStage.setTitle("Title"); 
    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 

Trong a.css

.button {  
    -fx-text-fill: white; 
    -fx-background-color: red; 
} 

Và trong b.css

.button {  
    -fx-text-fill: white; 
    -fx-background-color: black; 
} 
11

Nếu css trong cùng một gói đơn giản chỉ cần sử dụng

scene.getStylesheets().add(getClass().getResource("style.css").toExternalForm()); 
+0

Và nếu CSS là KHÔNG trong gói giống như lớp học? – Zephyr

4

Bạn có thể lấy URL từ java.io.File

File file = new File("style.css"); 
URL url = file.toURI().toURL(); 
scene.getStylesheets().add(url.toExternalForm()); 

hoặc dưới hình thức ngắn

scene.getStylesheets().add((new File("style.css")).toURI().toURL().toExternalForm()); 
0
scene.setUserAgentStylesheet("Assets/StyleSheets/Styless.css"); 
1

Trường hợp ngoại lệ được ném bởi vì chuỗi "C:/test.css" không phải là một nguồn tài nguyên URI. Vì vậy, bạn phải chuyển đổi chuỗi của bạn thành một tài nguyên URI.

Tính đến Java 7 bạn có thể làm:

String uri = Paths.get("C:/test.css").toUri().toString(); 
scene.getStylesheets().add(uri); 
Các vấn đề liên quan