我有一个二维JButton数组,我想为每个按钮添加一个不同的图像。这些图像命名为1.jpg,2.jpg ......
总共有27个按钮(3x9网格),因此手动设置它们会很烦人。我尝试使用ImageIcon数组和for循环,但它不起作用。有人知道我的代码有什么问题吗?
void createButtons() {
JButton[][] buttons = new JButton[3][9];
for (int i = 0; i < buttons.length; i++) {
for (int j = 0; j < buttons[i].length; j++) {
buttons[i][j] = new JButton();
buttons[i][j].setIcon(addImages());
}
}
}
ImageIcon addImages() {
ImageIcon[] images = new ImageIcon[27];
for (int i = 0; i < images.length; i++) {
images[i] = new ImageIcon(i + ".jpg");
return images[i];
}
答案 0 :(得分:0)
您正在混合应使用一次的方法,以使用其他方法制作所有图像,以获取所需的一个图像。试试这个:
ImageIcon[] addImages() {
ImageIcon[] images = new ImageIcon[27];
for (int i = 0; i < images.length; i++) {
images[i] = new ImageIcon(i + ".jpg");
}
return images;
}
然后你可以调用addImages()
并引用数组:
void createButtons() {
ImageIcon[] images = addImages(); // called once here
JButton[][] buttons = new JButton[3][9];
for (int i = 0; i < buttons.length; i++) {
for (int j = 0; j < buttons[i].length; j++) {
buttons[i][j] = new JButton();
buttons[i][j].setIcon(images[i * buttons[i].length + j]); // then use it here
}
}
}
答案 1 :(得分:0)
您可以直接在循环中设置图像:
dvipng
这不需要一个完整的方法(更糟糕的是,它写得不正确)。
编辑: void createButtons() {
JButton[][] buttons = new JButton[3][9];
for (int i = 0; i < buttons.length; i++) {
for (int j = 0; j < buttons[i].length; j++) {
buttons[i][j] = new JButton();
buttons[i][j].setIcon(new ImageIcon((i * 9 + j) + ".jpg"));
}
}
}
每次创建一个新的addImages()
时都会迭代你的addImages()
方法,如果有的话,应该只创建一次(在任何循环之外)。在内部,您开始迭代数组,但在第一次迭代ImageIcon[]
停止,因为您的i=0
。此方法将始终返回相同的值。
答案 2 :(得分:0)
您的addImages方法将始终返回带有0.jpg的新图像图标。
您可以这样做:
void createButtons() {
JButton[][] buttons = new JButton[3][9];
int index = 1; //start from 1.jpg
for (int i = 0; i < buttons.length; i++) {
for (int j = 0; j < buttons[i].length; j++) {
buttons[i][j] = new JButton();
buttons[i][j].setIcon(new ImageIcon( (index++) + ".jpg"));
}
}
}