2

いくつかのアイテム (子) を持つ JavaFX 2.2 TilePane があります。css を追加して、マウス ホバー時にアイテムのスケールが 1.2 に設定されるようにしました。デフォルトでは、子の順序によって、最初に描画されるノードと最後に描画されるノードが定義されます。toFront() に頼らず、ホバリングアイテムを他のすべての上に置き、それを最後のアイテムにする(最後に移動する)方法はありますか? この質問はhttps://stackoverflow.com/questions/13893514/scaling-children-in-a-flowpane-makes-the-children-clip-eachother (まだ回答されていません)に似ています。

問題のスクリーンショットは次の場所にあります: http://vladeck.files.wordpress.com/2013/03/javafx_tilepane.png?w=640

4

1 に答える 1

2

解決策/回避策

  1. TilePaneの代わりにGridPaneを使用します
  2. ユーザーがグリッド内の項目をクリックすると、その項目で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);
  }
});

電卓画像1 電卓画像2


バックグラウンド

お気づきのように、重複の問題は、のような一部のストック ペインでは解決できませんTilePane。これは、ノードの z オーダーと相対レイアウト位置の両方が、TilePane の子リスト内のノードの相対位置によって定義されるためです。このようなペインでは、ノードを の最後のレイアウト位置に移動しない限り、z オーダーを変更して前面に移動することはできませんTilePane

Aは、子ノードのリストの順序が子ノードの z オーダーのみを定義し、それらの子ノードのレイアウト配置を定義しないためGridPane、a と同じ問題に悩まされることはありません。TilePane

JavaFX が TilePanel を再描画するときに描画する子の順序を取得する独自のコードを実装する方法 (ハック?) はありますか?

はい、スキルがあればTilePane コードをハッキングできます。

于 2013-03-30T09:52:30.230 に答える