2012-05-24 35 views
5

Tôi đang vật lộn với một số kiểu dáng css khi làm việc với JavaFX ..JavaFX 2 debug css

tôi tự hỏi nếu có cách nào để gỡ lỗi css?

một số thứ như firebug hoặc công cụ tích hợp trong chrome hiển thị cho bạn khi bạn nhấn vào yếu tố mà kiểu CSS áp dụng cho nó.

Trả lời

4

Hãy xem trên Scenic View để xem nó có đáp ứng nhu cầu của bạn ít nhất một chút hay không.

+1

đây là công cụ rất tuyệt vời! didnt biết về nó - cảm ơn, nhưng thật đáng buồn là công cụ không hiển thị những gì thuộc tính css được gán cho các nút – bennyl

+1

JavaFX có chỉ được xây dựng trong tập tin CSS caspian.css. Tất cả các bộ chọn được định nghĩa ở đó và ghi đè các bộ chọn này là đủ cho hầu hết các trường hợp sử dụng (Các thay đổi sâu sắc hơn được thực hiện thông qua các giao diện). Vì vậy, việc sử dụng hỗ trợ CSS của Scene Builder để áp dụng kiểu cho một nút và tìm kiếm thuộc tính CSS nào được chỉ định và ngay lập tức thay đổi chúng một cách thích hợp bằng trình xây dựng/trình xem CSS của Netbeans sẽ cung cấp phần nào bạn đang yêu cầu. Kiểm tra hướng dẫn về Trình tạo cảnh. –

+0

caspian.css là một nguồn tuyệt vời - mặc dù nó vẫn có thể được tốt đẹp để có một cái gì đó giống như firebug cho css debuging .. nhưng tôi đoán tôi shouldnt được tham lam :) – bennyl

3

Ngoài việc sử dụng ScenicView như Uluk đề xuất, đôi khi tôi cũng chỉ đổ các nút đang hoạt động vào bảng điều khiển sau khi hiển thị Giai đoạn. Điều này mặc định toString() cho các nút liệt kê id css của họ và các lớp phong cách.

// debugging routine to dump the scene graph. 
public static void dump(Node n) { dump(n, 0); } 
private static void dump(Node n, int depth) { 
    for (int i = 0; i < depth; i++) System.out.print(" "); 
    System.out.println(n); 
    if (n instanceof Parent) 
    for (Node c : ((Parent) n).getChildrenUnmodifiable()) 
     dump(c, depth + 1); 
} 

Mẫu đầu ra:

[email protected] 
    [email protected][styleClass=lyric-text] 
    Button[id=null, styleClass=button change-lyric] 
    ButtonSkin[id=null, styleClass=button change-lyric] 
     [email protected] 
     [email protected][styleClass=text] 

Có một số api nội bộ không có giấy tờ xung quanh xử lý css, nhưng không công khai.

Yêu cầu đặt api này ở đây là: CSS Style Object Model in Java. Bạn tạo một thứ gọi là StyleMap và đính kèm nó vào một nút, có hiệu lực tạo ra một người nghe ghi lại các thay đổi xử lý css cho nút xảy ra sau bạn đã thêm Bản đồ kiểu.

public void addStyleMaps(Node node, int depth) { 
    node.impl_setStyleMap(FXCollections.observableMap(new HashMap<WritableValue, List<Style>>())); 
    if (node instanceof Parent) { 
    for (Node child : ((Parent) node).getChildrenUnmodifiable()) { 
     addStyleMaps(child, depth + 1); 
    } 
    } 
} 

Nếu bạn sửa đổi các thói quen bãi ở trên để =>

System.out.println(n + " " + node.impl_getStyleMap()); 

thì thường cũng sẽ in ra những thay đổi phong cách từ stylemaps đã được thêm vào các nút.

Lưu ý cuộc gọi ở trên sử dụng impl_ api không được dùng nữa (có thể sẽ) thay đổi trong các bản phát hành JavaFX trong tương lai và sẽ không nhận được hỗ trợ sử dụng và kiểm tra của api công khai. Tôi nghĩ rằng mặc dù, cho điều này, bạn sẽ không tìm thấy nó quá hữu ích cho đến khi cơ chế được thực hiện thành một công cụ đồ họa như ScenicView để tương tác cung cấp thông tin css Firebug phong cách. Tôi không nghĩ ScenicView là mã nguồn mở và việc triển khai css nội bộ không được công bố tài liệu, vì vậy có thể khó tạo ra một công cụ như vậy cho chính bạn.

+0

tôi cũng làm như vậy nhưng không hiển thị thông tin về thuộc tính css được chỉ định cho mỗi nút và từ tệp/bộ chọn nào, các thuộc tính đó đến từ – bennyl

+0

Câu trả lời được cập nhật để thảo luận về thông tin css chi tiết hơn bằng cách sử dụng api triển khai không được chấp nhận. – jewelsea