解決策/回避策
- TilePaneの代わりにGridPaneを使用します。
- ユーザーがグリッド内の項目をクリックすると、その項目でtoFrontが呼び出されます。
サンプルコード
サンプル スクリーンショットのタイル レイアウトに似たグリッド レイアウトに基づく電卓に、次のコードを追加しました。修正したアプリケーションでは、電卓のボタンが重ならなくなりました。驚いたことに、少し奇妙に見えましたが、拡大縮小されたボタンにより電卓が使いやすくなりました...
button.setOnMouseEntered(new EventHandler<MouseEvent>() {
@Override public void handle(MouseEvent mouseEvent) {
button.toFront();
button.setScaleX(1.6); button.setScaleY(1.6);
}
});
button.setOnMouseExited(new EventHandler<MouseEvent>() {
@Override public void handle(MouseEvent mouseEvent) {
button.setScaleX(1); button.setScaleY(1);
}
});
バックグラウンド
お気づきのように、重複の問題は、のような一部のストック ペインでは解決できませんTilePane
。これは、ノードの z オーダーと相対レイアウト位置の両方が、TilePane の子リスト内のノードの相対位置によって定義されるためです。このようなペインでは、ノードを の最後のレイアウト位置に移動しない限り、z オーダーを変更して前面に移動することはできませんTilePane
。
Aは、子ノードのリストの順序が子ノードの z オーダーのみを定義し、それらの子ノードのレイアウト配置を定義しないためGridPane
、a と同じ問題に悩まされることはありません。TilePane
JavaFX が TilePanel を再描画するときに描画する子の順序を取得する独自のコードを実装する方法 (ハック?) はありますか?
はい、スキルがあればTilePane コードをハッキングできます。