在所有GridLayout点中使用相同的标签吗?

问题描述 投票:0回答:1

我想用r行和c列组成一个网格。我进行了网格布局,使用for创建了一个我想在所有网格位置中使用的标签,但是我只能在一个网格位置上设置标签。我该如何在所有位置使用它,还有什么我没做?

公共类网格{私人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();
}

}

java swing jlabel layout-manager grid-layout
1个回答
1
投票

任何组件只能属于单个父/容器。将JLabel的相同实例添加到您的容器只是简单地先将其从其当前父级中删除,然后再将其添加到其新父级(所有同一个父级)中。

您需要创建JLabel的多个实例。

我会考虑使用某种工厂模式来减少任何可能重复的代码

© www.soinside.com 2019 - 2024. All rights reserved.