Java GridLayout выкладывает все мои JPanels в верхнем левом углу - PullRequest
3 голосов
/ 13 октября 2011

РЕШИТЬ:

Просто выяснил, в чем проблема, после попытки сделать SSCCE.

Это было связано с моим классом ячеек, я не осознавал, что переопределяю getX () и getY () из класса JComponent.

После переименования этих методов доступа все работает как положено

========================================

У меня есть JPanel с GridLayout, установленным в 3 строки по 3 столбца.

Я пытаюсь добавить JPanels к каждой ячейке в сетке, чтобы заполнить все 9 ячеек. У каждого из этих JPanels есть переопределенный метод paintChildren, который будет рисовать какой-то прямоугольник, начинающийся в верхнем левом углу JPanel - конечным результатом будет то, что каждая ячейка имеет прямоугольник, начинающийся в верхнем левом углу ячейки.

После добавления всех JPanel к сетке все они появляются в верхнем левом углу, перекрывая друг друга (я подтвердил, что они перекрываются), вместо того, чтобы быть размещенными в сетке 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);
}
}

1 Ответ

0 голосов
/ 13 октября 2011
  • Убедитесь, что вы импортируете права Panel. (И не класс java.awt.Panel.) Или, лучше, переименуйте свой класс в GridPanel или что-то подобное, чтобы избежать путаницы / столкновений.

  • Вы, вероятно, не хотите переопределять paintChildren. Переопределение paintComponent звучит как лучший вариант в этом случае.

  • Вы можете установить минимальный / предпочтительный / максимальный размер для класса Cell.

Трудно сделать больше наблюдений без фактического кода, который создает и использует ваш класс Panel.

...