解決済み:
SSCCEを作成しようとした後、問題が何であるかがわかりました。
それは私の cell クラスに関係していました。JComponent クラスから getX() と getY() をオーバーライドしていることに気付きませんでした。
これらのアクセサーの名前を変更すると、すべて期待どおりに機能します
========================================
3 行 x 3 列に設定された GridLayout を持つ JPanel があります。
グリッドレイアウトの各セルに JPanels を追加して、9 つのセルすべてを埋めようとしています。これらの JPanel のそれぞれにはオーバーライドされた paintChildren メソッドがあり、JPanel の左上から始まるある種の長方形を描画します。最終結果は、各セルにセルの左上から始まる長方形があります。
すべての JPanel を gridlayout に追加すると、3x3 グリッドに配置されるのではなく、すべてが重なり合って左上隅に表示されます (重なり合っていることを確認しました)。
それらを 3x3 グリッドに配置するにはどうすればよいですか?
(簡体字) コード:
public class Panel extends JPanel {
public Panel(int x, int y) {
layout = new GridLayout(x, y, 2, 2);
setLayout(layout);
populateGrid();
}
public void populateGrid() {
removeAll();
for (int i = 0; i < 9; i++)
add(new Cell(50,50));
}
}
public class Cell extends JPanel {
public Cell(int x, int y) {
// x/y values used to define rectangle
setBorder(BorderFactory.createLineBorder(new Color(0,0,0)));
setBackground(Color.WHITE);
}
public void paintChildren(Graphics g) {
g.setColor(Color.BLUE);
g.fillRect(0, 0, x, y);
}
}