GridLayout内でのセル位置を取得する
Total: 3944, Today: 4, Yesterday: 2
Posted by aterai at
Last-modified:
Summary
GridLayoutを設定したJPanel内に配置したJButtonをクリックしたときそのセル位置を取得します。
Screenshot

Advertisement
Source Code Examples
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, KotlinDescription
Container#getComponentZOrder(Component)メソッドでコンテナ(JPanel)内のコンポーネント(JButton)のZ軸順インデックスを取得GridLayout#getColumns()でレイアウト(GridLayout)内の列数を取得Z軸順インデックスを列数で割りコンポーネントの存在する行番号を取得Z軸順インデックスを列数で剰余しコンポーネントの存在する列番号を取得
- 最初のセル(左上)は
(0, 0)なので行列にそれぞれ1足してコンポーネントの存在するセル位置をJTextAreaに表示 - コンテナの
ComponentOrientationプロパティが水平方向に右から左(ComponentOrientation.RIGHT_TO_LEFT)の場合は考慮していない