2012-05-24 12 views
5

walczę z jakimś css stylizacji podczas pracy z JavaFX ..JavaFX 2 debug css

Zastanawiam się, czy jest jakiś sposób, aby debugować CSS?

coś takiego jak firebug lub narzędzie do wbudowania w chrome, które pokazuje, kiedy naciskasz na element, do którego odnoszą się style CSS.

Odpowiedz

4

Spójrz na Scenic View, aby zobaczyć, czy odpowiada Twoim potrzebom co najmniej.

+1

to bardzo ładne narzędzie! Nie wiedziałem o tym - dziękuję, ale niestety narzędzie nie pokazuje, jakie właściwości css są przypisane do węzłów. – bennyl

+1

JavaFX ma jedyny wbudowany plik CSS caspian.css. Wszystkie selektory są tam zdefiniowane i nadpisanie tych selektorów wystarcza dla większości przypadków użycia (głębsze zmiany są dokonywane za pomocą skórek). Wykorzystanie na przykład obsługi CSS programu Scene Builder do stosowania stylów w węźle i sprawdzenia, które właściwości CSS są przypisane i natychmiastowej ich zmiany za pomocą konstruktora/przeglądarki CSS Netbeans zapewni nieco, o co prosisz. Sprawdź samouczek programu Scene Builder. –

+0

caspian.css jest świetnym źródłem - chociaż nadal może być fajnie mieć coś takiego jak firebug do debugowania css .. ale chyba nie powinienem być chciwy :) – bennyl

3

Oprócz korzystania z ScenicView, jak zasugerował Uluk, czasami po prostu po prostu zrzutu aktywnych węzłów do konsoli po wyświetleniu Stage. Ta domyślna toString() dla węzłów zawiera ich identyfikatory css i klasy stylów.

// 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); 
} 

Przykładowe wyjście:

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

Istnieją pewne nieudokumentowane api wokół wewnętrznego przetwarzania CSS, ale nic publicznego.

Wniosek o udostępnienie tego api publicznej: CSS Style Object Model in Java. Tworzysz obiekt o nazwie StyleMap i dołączasz go do węzła, który w efekcie tworzy detektor, który rejestruje zmiany przetwarzania css dla węzła występujące po dodaniu mapy stylów.

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); 
    } 
    } 
} 

Jeśli zmodyfikować procedurę zrzutu wyżej =>

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

wtedy procedura będzie również wydrukować zmiany stylu ponieważ stylemaps dodano do węzłów.

Uwaga powyższe wywołanie używa imp_ api, które jest nieaktualne, co może (i prawdopodobnie będzie) zmienić w przyszłych wydaniach JavaFX i nie otrzymało obsługi i testowania publicznego interfejsu API.

Myślę jednak, że nie okaże się to zbyt użyteczne, dopóki mechanizm nie zostanie zaimplementowany w narzędzie graficzne, takie jak ScenicView, aby interaktywnie udostępniać informacje CSS typu Firebug. Nie sądzę, że ScenicView jest jeszcze opensource, a wewnętrzna implementacja CSS nie jest publicznie udokumentowana, więc samodzielne stworzenie takiego narzędzia może być trudne.

+0

Również to robię, ale to nie pokazuje informacji o tym, jakie właściwości css przypisano dla każdego węzła iz którego pliku/selektora te właściwości pochodziły z – bennyl

+0

Zaktualizowana odpowiedź w celu omówienia uzyskiwania bardziej szczegółowych informacji o css przy użyciu przestarzałego api implementacji. – jewelsea