GridLayout - JButtons、数组和图像?

GridLayout - JButtons, array and images?

我想制作一个 9x9 的数组,并用 JButtons 上传数组,它是一个图标。我真的不明白为什么它不起作用......希望你能帮忙,谢谢!

    BWbutton buttons[][] = new BWbutton[9][9];

    JPanel p1 = new JPanel();
    p1.setBackground(Color.white);
    p1.setPreferredSize(new Dimension(500,500));
    p1.setLayout(new GridLayout(9,9,40,40));


   for(int i=0; i<9; i++){
        for(int j=0; j<9; j++){
            buttons[i][j]=new BWbutton();
            p1.add(buttons[i][j]);
    }   
    }

BWbutton.java:

import javax.swing.*;

public class BWbutton extends JButton{

        public BWbutton(){
            ImageIcon icon = new ImageIcon("image.png");
            JButton bt1 = new JButton(icon);
        }

}

您扩展了 JButton class,但随后在您的代码中创建了一个新的 JButton:

ImageIcon icon = new ImageIcon("image.png");
JButton bt1 = new JButton(icon);

这意味着您有两个按钮:

  1. 您添加到 GUI 中的 class 本身没有图标和
  2. 您创建但从未使用过的按钮。

不要创建新的 JButton。相反,您只需要:

ImageIcon icon = new ImageIcon("image.png");
//JButton bt1 = new JButton(icon);
setIcon( icon );

最好不要创建 BWbutton class,因为您没有向按钮添加任何新功能。

而是在循环代码中创建一个按钮并设置图标:

//buttons[i][j]=new BWbutton();
JButton button =  new JButton( new ImageIcon("image.png") );
buttons[i][j]= button;

更好的是只在循环外创建图像图标,然后您可以在所有按钮上共享图标。