GridLayout内でのセル位置を取得する
Total: 3323
, Today: 1
, Yesterday: 2
Posted by aterai at
Last-modified:
概要
GridLayout
を設定したJPanel
内に配置したJButton
をクリックしたときそのセル位置を取得します。
Screenshot
Advertisement
サンプルコード
GridLayout gl = new GridLayout(5, 7, 5, 5);
JPanel p = new JPanel(gl);
p.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
JTextArea log = new JTextArea(3, 0);
ActionListener al = e -> {
JComponent c = (JComponent) e.getSource();
int idx = p.getComponentZOrder(c);
int row = idx / gl.getColumns();
int col = idx % gl.getColumns();
log.append(String.format("Row: %d, Column: %d%n", row + 1, col + 1));
};
for (int i = 0; i < gl.getRows() * gl.getColumns(); i++) {
JButton b = new JButton();
b.addActionListener(al);
p.add(b);
}
View in GitHub: Java, Kotlin解説
Container#getComponentZOrder(Component)
メソッドでコンテナ(JPanel
)内のコンポーネント(JButton
)のZ
軸順インデックスを取得GridLayout#getColumns()
でレイアウト(GridLayout
)内の列数を取得Z
軸順インデックスを列数で割りコンポーネントの存在する行番号を取得Z
軸順インデックスを列数で剰余しコンポーネントの存在する列番号を取得
- 最初のセル(左上)は
(0, 0)
なので行列にそれぞれ1
足してコンポーネントの存在するセル位置をJTextArea
に表示 - コンテナの
ComponentOrientation
プロパティが水平方向に右から左(ComponentOrientation.RIGHT_TO_LEFT
)の場合は考慮していない