5

JavaFXを使用しているときに、いくつかのcssスタイリングに苦労しています。

cssをデバッグする方法はありますか?

ファイアバグやクロームの組み込みツールのようなもので、要素を押すとcssスタイルが適用されることを示します。

4

2 に答える 2

6

Scenic Viewを見て、少なくともあなたのニーズを満たしているかどうかを確認してください。

于 2012-05-24T09:18:15.253 に答える
6

Ulukが提案したようにScenicViewを使用することに加えて、ステージを表示した後、アクティブノードをコンソールにダンプすることもあります。ノードのこのデフォルトtoString()は、cssIDとスタイルクラスを一覧表示します。

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

サンプル出力:

BorderPane@13c3750
  Text@2e3919[styleClass=lyric-text]
  Button[id=null, styleClass=button change-lyric]
    ButtonSkin[id=null, styleClass=button change-lyric]
      ImageView@13a4e73
      LabeledText@567aef[styleClass=text]

css処理に関する文書化されていない内部APIがいくつかありますが、公開されているものはありません。

このAPIを公開するためのリクエストはここにあります:JavaのCSSスタイルオブジェクトモデル。StyleMapと呼ばれるものを作成し、それをノードにアタッチします。これにより、実際には、StyleMapを追加した後に発生するノードのcss処理の変更を記録するリスナーが作成されます。

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

次に、スタイルマップがノードに追加されたため、ルーチンはスタイルの変更も出力します。

上記の呼び出しは非推奨のimpl_apiを使用していることに注意してください。これは、将来のJavaFXリリースで変更される可能性があり(おそらく変更される可能性があります)、パブリックAPIの使用法とテストのサポートを受けていません。

ただし、このためには、メカニズムがScenicViewなどのグラフィカルツールに実装されてFirebugスタイルのcss情報をインタラクティブに提供するまで、あまり便利ではないと思います。ScenicViewはまだオープンソースではないと思いますし、内部のcss実装は公開されていないので、そのようなツールを自分で作成するのは難しいかもしれません。

于 2012-05-24T09:31:58.803 に答える