2

コンテキスト: java1.7.0_07 と Jython を使用して JavaFX アプリケーションを構築しています。私のアプリケーションには、可変数の GridPanes を含む GridPane を含む ScrollPane があります。私のアプリケーションは、TreeView の選択が変更されるたびに、最も内側の GridPanes を破棄して再構築します。

問題: TreeView で何かを選択すると、最も内側の GridPanes が巨大になり、最初の最も内側の GridPane を除くすべてが ScrollPane の表示可能領域の外に押し出されます。それにもかかわらず、ScrollPane にはスクロール バーが表示されないため、最も内側に GridPane オブジェクトが 1 つしかないような印象を受けます。ScrollPane を含むウィンドウのサイズを手動で変更すると、問題が解決します! GridPanes を追加した瞬間から、最も内側の GridPanes をそのサイズにするにはどうすればよいですか?

もちろん、私が最初に試したのはrequestLayout()、Jython インタープリターから外側の GridPane を呼び出すことでした。これは、含まれているウィンドウのサイズ変更と同様に機能します。これは、最も内側の GridPanes が巨大であることを発見した方法でもありgetBoundsInParent()ます。最も内側の GridPanes のそれぞれを呼び出しました。

ただし、私のChangeListener.changed()実装内では、すべてが異なります。呼び出しrequestLayout()ても何も起こらないようです。さらに、私の最も内側の GridPanes のそれぞれの境界は[0,0,0,0]! ここで非同期処理が行われているようですが、私は JavaFX を初めて使用するので、何が原因かわかりません。

更新:近づいています!最も内側の各 GridPanes には が含まれており、各ラベルを Label呼び出しています。ラベルでラッピングを有効にしないと、レイアウトは正しく動作します! 各ラベルを呼び出すと、テキストの折り返しが有効になっていてもレイアウトは正しく動作しますが、各ラベルに割り当てる適切な高さを推測しようとするのは本当に嫌いです。含まれているウィンドウを「小刻みに動かす」ときに、ラベルが想定する境界からラベルを開始したいだけです。しかし、どのように?setWrapText(true)setPrefHeight(40)

4

1 に答える 1

2

Each of the innermost GridPane objects had a ColumnConstraints object with a percentWidth of 100. Removing the code that added this (unnecessary) ColumnConstraints object to the innermost GridPane objects fixed the layout misbehavior that appeared only when the contained Label objects had wrapText set to true.

于 2012-11-09T18:46:10.123 に答える