WedX - журнал о программировании и компьютерных науках

Java GridLayout выкладывает все мои панели JPanel в верхнем левом углу.

РЕШЕНО:

Только что узнал, в чем проблема, после попытки сделать 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);
}
}

  • (Упрощенный) код: чтобы быстрее получить помощь, опубликуйте SSCCE, а не некомпилируемые фрагменты кода. 13.10.2011
  • Взгляните на эти примечания. Они поставляются с примерами, а также охватывают макет панели и т. д. 13.10.2011

Ответы:


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

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

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

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

13.10.2011
  • Да, я переименовал их для публикации здесь, настоящее имя более значимо. Я создаю экземпляр Panel с помощью: new Panel(3, 3); и он помещается в центр рамки. 13.10.2011
  • Новые материалы

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


    Для любых предложений по сайту: [email protected]