РЕШЕНО:
Только что узнал, в чем проблема, после попытки сделать SSCCE.
Это было связано с моим классом ячеек, я не осознавал, что переопределяю getX() и getY() из класса JComponent.
После переименования этих аксессоров все работает как положено
========================================
У меня есть JPanel с GridLayout, установленным на 3 строки x 3 столбца.
Я пытаюсь добавить JPanels в каждую ячейку сетки, чтобы заполнить все 9 ячеек. Каждый из этих JPanels имеет переопределенный метод paintChildren, который будет рисовать какой-то прямоугольник, начиная с верхнего левого угла JPanel - конечным результатом будет каждая ячейка с прямоугольником, начинающимся с верхнего левого угла ячейки.
После добавления всех JPanels в 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);
}
}