2016-03-22 9 views
0

私のゲームのメニュー画面には、カスタムの「ボタン」があります。基本的には、RectangleTextというノードが積み重なった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 quesionthis seems to be the sameから解決策を試してみましたが、私は述べたように、私は怖い私minX()VBoxが私のBorderPaneの中央の列を埋める唯一のものですので、設定値を持っていません。

編集: StackPaneは.getMinXのための右の値を与えるように思われる()私は.setAlignment(Pos.CENTER)を使用しますが、私は、テキストで、唯一のVBoxと、そう、テキストが上に立ち往生することを行うことは許されないのですボタンの

+0

1つの質問と1つ(おそらく偶発的な)提案。なぜこのようなマウス座標が必要なのですか? (おそらく、あなたが達成しようとしているものを達成するためのより簡単な方法があります。)そして提案:あなたの四角形+テキスト+ StackPaneは本当にラベルと同じです(多分CSSを使ってスタイルを追加しています)。おそらくコードを単純化してラベルを使用するだけです。 –

+0

あなたがボタンのポジションを探していると言うとき、あなたはそれらを何に相対的にしたいですか?ボーダーペイン?シーン?スクリーン? –

+0

@James_Dシーンに比例して、境界のためにlocalToSceneを使用します。そして、ラベルを付けて私にその事件を助けますか? StackPaneを拡張し、長方形とテキストを追加したり、必要なメソッドをいくつか追加して、ボタンクラスを作成しました。例えば、私は.hover()メソッドで矩形の塗りと線を変更しています。それで、私はマウスのやりとりのコードをハードコーディングしているので、その位置を知る必要があります。 – Chexxor

答えて

0

私の問題は、VBoxと私のStackPanesが、表示されているRectangleの領域だけでなく、すべての可能な領域を占めているためです。問題は、長方形とテキストを含むStackPaneでsetMaxWidth(100)を呼び出すことによって解決されました。

また、唯一の問題は、ゼロのx座標があることです。多分これは「本当の」ものです。 button1に背景を設定して、レイアウト内の位置を確認します。 - James_D

関連する問題