JavaFXを独学で学んでいるものです。やや混乱しているので、伝わりにくい箇所があるかもしれません。
その際はなるべく早く追記しますので、指摘など頂ければ幸いです。
宜しくお願い致します。
■実現したいこと
GridPaneに、5×5の形でStackPaneを配置しています。
StackPaneをボタンのように使用し、クリックされたときに
「何行目の何列目がクリックされたのか」という情報をGridPaneが把握出来るようにしたいと考えています。
なるべくstatic修飾子を用いない方法で実現したいです。
因みに、ここでいうStackPaneとは、StackPaneを継承したクラス「Square.java」を指しています。
■試してみた解決策
1、Grid.java内にてEventを定義し、Squareクラスのインスタンス(squares)に実装
-> static修飾子を沢山使用する羽目になったので断念。
2、Observerパターンというものがあることを知ったので、Squareクラスを観察対象のクラスにする方法を考案
-> SquareクラスはStackPaneクラスを継承しているので断念。
■コード
クラス1 Grid.java
lang
1public class Grid extends Observable implements Initializable, Observable{ 2 public class Grid(){ 3 GridPane gp = new GridPane(); 4 private final Square[][] squares = new Square[5][5]; 5 for(int i=0;i<5;i++){ 6 for(int j=0;j<5;j++){ 7 squares[i][j] = new Square(); 8 // 何行目の何列目かを伝える 9 squares[i][j].where_I_am(i,j); 10 // GridPaneに配置 11 gp.add(squares[i][j],i,j); 12 ●●●修正●●● 13 squares[i][j].setOnMouseClicked(new EventHandler<MouseEvent>() { 14 @Override 15 public void handle(MouseEvent event) { 16 choosenRow = squares[i][j].gridPaneRow; 17 choosenColumn = squares[i][j].gridPaneColumn; 18 } 19 }); 20 ●●●ここまで●●● 21 } 22 } 23}
クラス2 Square.java extends StackPane
lang
1public class Square extends StackPane{ 2 private int gridPaneRow; 3 private int gridPaneColumn; 4 public void where_I_am(int row, int column){ 5 gridPaneRow = row; 6 gridPaneColumn = column; 7 } 8}
■よくわかっていない点
1、SquareクラスがStackPaneを継承する以外の方法があるかどうか
2、static修飾子を使わない方法自体が可能であるかどうか
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/03/05 02:17
2018/03/05 02:19
2018/03/05 02:43 編集
2018/03/05 03:44