私のゲームのメニュー画面には、カスタムの「ボタン」があります。基本的には、Rectangle
とText
というノードが積み重なったStackPane
です。基本的には、これは私のボタンの構造と似ています。いくつかのヌル領域を持つBorderPaneのノードの絶対座標を取得する
Pane button1 = new StackPane(new Rectangle(100, 50), new Text("Play!"));
Pane button2 = [....];
それから私は、ヘッダーテキストと一緒のVBoxに、私のメニューにボタンを挿入します。
VBox buttons = new VBox(button1, button2, button3...);
Pane menuScreen = new BorderPane(buttons, new Text("The Game"), null, null, null);
しかし、マウスの位置のための私のカスタム検出のために、私はボタンを知っている必要があり、ボタンに比べて私がいない場合、私は.setAlignment(Pos.CENTER)
と64.0と設定のVBoxを持っている場合は、「位置...
int x = button1.getLayoutX(); //returns 0
int x = button1.getTranslateX(); //returns 0
int x = button1.localToScene(0, 0).getX(); //returns 0
int x = button1.localToScene(buttons.get(0).getBoundsInLocal()).getMinX(); //returns 0
int x = button1.localToScene(buttons.get(0).getBoundsInLocal()).getMaxX(); //returns the width of the entire scene
int x = buttons.get(0).getTranslateX(); //returns 0
int y = button1.localToScene(buttons.get(0).getBoundsInLocal()).getMinY();
最後のケースは234.0を返します。しかし、.getMinX()
の場合、いずれの場合も0.0にとどまります。私はBorderPane
の左/右/ボット領域がnull
に設定されているのに対し、トップ領域にはタイトルテキストがあると考えています。
ボタンがPane
クラス以外のレイアウトペインにある場合、x
の座標を取得する方法が見つかりません。 StackPaneも試してみました。私の疑問は、固定座標がなく、プロパティが関与しているということですが、私が探しているものがわからないときは、読んでいるだけで混乱します。
私はthis quesionとthis seems to be the sameから解決策を試してみましたが、私は述べたように、私は怖い私minX()
VBox
が私のBorderPane
の中央の列を埋める唯一のものですので、設定値を持っていません。
編集: StackPaneは.getMinXのための右の値を与えるように思われる()私は.setAlignment(Pos.CENTER)
を使用しますが、私は、テキストで、唯一のVBoxと、そう、テキストが上に立ち往生することを行うことは許されないのですボタンの
1つの質問と1つ(おそらく偶発的な)提案。なぜこのようなマウス座標が必要なのですか? (おそらく、あなたが達成しようとしているものを達成するためのより簡単な方法があります。)そして提案:あなたの四角形+テキスト+ StackPaneは本当にラベルと同じです(多分CSSを使ってスタイルを追加しています)。おそらくコードを単純化してラベルを使用するだけです。 –
あなたがボタンのポジションを探していると言うとき、あなたはそれらを何に相対的にしたいですか?ボーダーペイン?シーン?スクリーン? –
@James_Dシーンに比例して、境界のためにlocalToSceneを使用します。そして、ラベルを付けて私にその事件を助けますか? StackPaneを拡張し、長方形とテキストを追加したり、必要なメソッドをいくつか追加して、ボタンクラスを作成しました。例えば、私は.hover()メソッドで矩形の塗りと線を変更しています。それで、私はマウスのやりとりのコードをハードコーディングしているので、その位置を知る必要があります。 – Chexxor