在2D JButton阵列上添加图像

时间:2015-12-15 20:54:44

标签: java arrays

我有一个二维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];
    }

3 个答案:

答案 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"));
            }
        }
    }