2012-05-24 2 views
5

Я борюсь с некоторыми CSS стилем при работе с JavaFX ..JavaFX 2 отладки CSS

Интересно, есть ли способ отладки CSS?

somthing like firebug или встроенный инструмент в хром, который показывает вам, когда вы нажимаете на элемент, к которому применяются стили CSS.

ответ

4

Посмотрите на Scenic View, чтобы узнать, соответствует ли это вашим потребностям.

+1

это очень хороший инструмент! не знал об этом - спасибо, но, к сожалению, инструмент не показывает, какие свойства css назначаются узлам. – bennyl

+1

JavaFX имеет единственный встроенный CSS-файл caspian.css. Все селекторы определены там, и переопределение этих селекторов достаточно для большинства случаев использования (более глубокие изменения выполняются с помощью скинов). Поэтому, например, использование CSS-скриптов Scene Builder для применения стилей к узлу и поиск свойств CSS и их немедленное изменение с использованием построителя/просмотра CSS Netbeans предоставит вам несколько запросов. Проверьте учебник сценария. –

+0

caspian.css - отличный источник - хотя он может быть приятным иметь что-то вроде firebug для отладки css .. но я думаю, я не должен быть жадным :) – bennyl

3

В дополнение к использованию ScenicView, предложенному Улуком, иногда я также просто удаляю активные узлы в консоли после показа Stage. Это значение по умолчанию для toString() для узлов перечисляет их идентификаторы css и классы стилей.

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

Пример вывода:

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

Существует несколько недокументированных внутренний апи вокруг обработки CSS, но ничего общественности.

Запросить эту публикацию можно здесь: CSS Style Object Model in Java. Вы создаете вещь, называемую StyleMap, и присоединяете ее к узлу, что фактически создает слушатель, который записывает изменения обработки css для узла, следующего за после, вы добавили StyleMap.

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

Если изменить подпрограмму дампа выше =>

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

, то процедура будет также распечатать изменения стиля, так как stylemaps были добавлены к узлам.

Примечание. Вышеупомянутый вызов использует impl_ api, который устарел, который может (и, вероятно, будет) изменяться в будущих выпусках JavaFX и не получит поддержку использования и тестирования публичного api.

Я думаю, что для этого вы не найдете его слишком полезным до тех пор, пока механизм не будет реализован в графическом инструменте, таком как ScenicView, чтобы интерактивно предоставлять информацию об CSS-стиле Firebug. Я не думаю, что ScenicView еще есть openource, а внутренняя реализация css не публиковалась, поэтому создать такой инструмент может быть сложно.

+0

Я тоже это делаю, но не показываю информацию о том, какие свойства css назначены для каждого узла и из какого файла/селектора эти свойства пришли из – bennyl

+0

Обновленный ответ для обсуждения получения более подробной информации css с использованием устаревшей реализации api. – jewelsea