0

嗨,我对 java 很陌生。我需要为游戏命名 Ratsuk 女巫很像国际象棋,但它只有骑士。因此,当骑士不再有移动的空间时,玩家就输了。

我为此做了一系列按钮

import java.awt.*;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Tablero {

    private JButton[][] mesa;

    public Tablero() {
        mesa = new JButton[8][8];
    }

    public void cuadriculado(JFrame ventana) {
        JPanel panel = new JPanel(new GridLayout(8, 8, 4, 4));
        for (int i = 0; i < mesa.length; i++) {
            for (int j = 0; j < mesa[0].length; j++) {
                mesa[i][j] = new JButton();
                mesa[i][j].setPreferredSize(new Dimension(40, 40));
                panel.add(mesa[i][j]);
            }
        }
        for (int r = 0; r < mesa.length; r++) {
            for (int t = 0; t < mesa[0].length; t++) {
                if (r % 2 == 0 || r == 0) {
                    if (t % 2 == 0 || t == 0) {
                        mesa[r][t].setBackground(Color.BLACK);
                    } else {
                        mesa[r][t].setBackground(Color.WHITE);
                    }
                } else {
                    if (t % 2 == 0 || t == 0) {
                        mesa[r][t].setBackground(Color.WHITE);
                    } else {
                        mesa[r][t].setBackground(Color.BLACK);
                    }
                }
            }
        }
        ventana.setContentPane(panel);
        ventana.setSize(500, 500);
        ventana.setVisible(true);
        Icon image = new ImageIcon(getClass().getResource("redKnight.gif"));
        mesa[0][0] = new JButton(image);
    }
}

该文件编译但我试图在按钮 mesa[0][0] 中设置的图像没有出现。我怎样才能解决这个问题?

4

3 回答 3

0

尝试这个:

  try {
Icon image = ImageIO.read(getClass().getResource("redKnight.gif"));      
mesa[0][0] = new JButton();
    mesa[0][0].setIcon(new ImageIcon(image ));
  } catch (IOException ex) {
  }
于 2013-06-15T07:36:11.097 回答
0

你不应该再创造新JButton的。但应该为该现有对象设置 。mesa[0][0] iconJButton

Icon image = new ImageIcon(getClass().getResource("redKnight.gif"));
mesa[0][0].setIcon(image);
于 2013-06-15T07:38:12.107 回答
0

您正在创建新JButton对象而不是将图像添加到现有JButton对象,因此存在问题。

设置mesa[0][0]=new JButton(image)不会使已添加JButton的对象变为JFrame要替换的对象。您应该刷新 Java 的基础知识一次。

使用JButton#setIcon(Icon img)方法将图像添加到已经存在的JButton对象。

           `mesa[0][0].setIcon(image);`

而且,由于您在设置框架可见后添加图像,您可能需要通过调用JFrame#repaint()左右来刷新您的框架......

或者像这样更改您的代码:

    Icon image = new ImageIcon(getClass().getResource("redKnight.gif"));
    mesa[0][0].setIcon(image);
    ventana.setContentPane(panel);
    ventana.setSize(500, 500);
    ventana.setVisible(true);
于 2013-06-15T07:39:28.347 回答