我想用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();
}
}
任何组件只能属于单个父/容器。将JLabel
的相同实例添加到您的容器只是简单地先将其从其当前父级中删除,然后再将其添加到其新父级(所有同一个父级)中。
您需要创建JLabel
的多个实例。
我会考虑使用某种工厂模式来减少任何可能重复的代码