質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Q&A

解決済

1回答

3289閲覧

親Paneの座標を取得したい

XCUBE

総合スコア101

JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

0グッド

1クリップ

投稿2016/02/10 10:24

実際のものだと長すぎるので本題と関係ない要素は割愛していますが
次のようなFXMLでDrawAreaとIDを付けたPaneがあります。

このPaneにマウスホイールを動かすとScrollEventが発生するようにして
Paneの大きさをを変えつつ位置を移動する処理を作っています。

ある程度できたのですが、細かい位置の補正をするために、Windowの中で
親要素のScrollPaneが配置されている左上の絶対座標を取得したいのですが、
いろいろ調べても中々答えを見出すことができません。

ご存じの方、ご教示いただけますでしょうか。

FXML

1<AnchorPane prefHeight="817.0" prefWidth="1125.0" > 2 <children> 3 <MenuBar AnchorPane.topAnchor="0.0"> 4 <menus> 5 ・・・・・・ 6 </menus> 7 </MenuBar> 8 <SplitPane dividerPositions="0.21104185218165628"> 9 <items> 10 <SplitPane dividerPositions="0.5" orientation="VERTICAL"> 11 <items> 12 ・・・・・・ 13 </items> 14 </SplitPane> 15 <ScrollPane prefHeight="806.0" prefWidth="821.0"> 16 <content> 17 <Pane fx:id="DrawArea" prefWidth="1920.0" prefHeight="1080.0" > 18 <children> 19 </children> 20 </Pane> 21 </content> 22 </ScrollPane> 23 </items> 24 </SplitPane> 25 </children> 26</AnchorPane>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

時間が経過してしまっている質問なので気が引けますが・・・

ひょっとしたらPaneの親NodeがScrollPaneでないところにひっかかっておられるのではないでしょうか。ScrollPaneのcontentにあたるNodeは実際にはScrollPaneのSkinにある隠れたNode階層に置かれるためScrollPaneと直接の親子関係にはありません(既にご存知であるかも知れませんが・・・)。実際にいくつNodeが挟まっているかはJavaFXのCSSドキュメントに階層関係が記載されてはいるもののそれに依存しないほうがよい気がします。ScrollPaneの実装が変更されるとは考えにくいですがより単純明快な方法が望ましいと思うからです。

対処ですが、ScrollPaneにもfx:idを付与し、直接ScrollPaneへアクセスしてWindow内相対位置を求めるとよいと思います。

なおScrollPaneとPaneは直接の親子関係ではなく先祖と子孫の関係になると思いますが相対位置を求めるにはlocalToSceneによって座標系を合わせてやると計算しやすいと思います。

投稿2016/12/17 17:13

KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

XCUBE

2016/12/20 04:34

ご回答ありがとうございます。 ご教示いたたいたようにfx:idで対応しました。 当時、あまり重要でないノードにidを付けたりするのを躊躇していたのと せっかく親子関係にあるので、血縁関係から導き出せないかというところで質問させていただきました。 直接の親子関係でないというお話しは大変勉強になりました。
KSwordOfHaste

2016/12/20 04:53

「あまり重要でないノードにidを付けないほうがよい」というのはおっしゃるとおりと思います。この場合は参照せざるをえないのでやむを得ずという感じですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問