Применить один и тот же JLabel во всех точках GridLayout? - PullRequest
0 голосов
/ 01 октября 2019

Я хочу сделать сетку из r строк и c столбцов. Я сделал макет сетки, создал метку, которую я хочу использовать во всех позициях сетки, используя for, но мне удалось установить метку только в одном месте сетки. Как я могу использовать его во всех местах, и что я не делаю?

public class Grid {
    private JFrame f;

    public Grid(String fname, int row, int column, int d) {
        f = new JFrame(fname);
        f.setLayout(new GridLayout(row,column));
        f.setSize(row*d,column*d);
        f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        addContent(row,column,d);
    }

    public void open() {
        f.setVisible(true);
    }

    private void addContent(int r, int c, int d) {
        JLabel label=new JLabel(" ");
        Border border = BorderFactory.createLineBorder(Color.black, 2);
        label.setBorder(border);
        label.setPreferredSize(new Dimension(d,d));
        for(int i=0;i!=r+c; i++) {
            f.add(label);
        }
    }

    public static void main(String[] args) {
         Grid grid = new Grid("Test", 5, 4, 50);
         grid.open();
    }
}

РЕДАКТИРОВАТЬ: Может кто-нибудь получить пример кода того, как я должен генерировать копии этикетки?

1 Ответ

1 голос
/ 01 октября 2019

Любой компонент может принадлежать только одному родителю / контейнеру. Добавление того же экземпляра JLabel к вашему контейнеру - это просто удаление его сначала из его текущего родителя перед добавлением его в его нового родителя (будь то один и тот же родитель).

Вам необходимо создать несколько экземпляров JLabel.

. Я бы хотел использовать какой-либо заводской шаблон для сокращения любого потенциально дублирующегося кода

.
...