1

私は簡単なチェス盤を持っていて、それもピースを追加しようとしています。正方形を追加せずにアイコンの画像を変更したい。これどうやってするの?

その正方形にある画像を上書きしたいのですが、現時点で私が持っているものはさらに正方形を追加しているようです。

チェスの正方形のクラスは、ピースタイプとx/y座標を取ります。

以下のコード:

チェス盤:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class ChessBoard2
{   
    public static void main(String[] Args)
    {
        JFrame a = new JFrame("Chess");
        JPanel panel = new JPanel();
        ChessSquare[][] squares = new ChessSquare[8][8];
        panel.setLayout(new GridLayout(8,8));   

        int x = 0; 
        int y = 0;

        for ( x=0; x<8; x++)
            for( y=0; y<8; y++)
            {
                squares[x][y] = new ChessSquare("emptysquare", x, y); 
                panel.add(squares[x][y]);
            }

        x=5;y=8;
        squares[x][y] = new ChessSquare("king", x, y);

        a.setSize(375,375);
        a.setContentPane(panel);
        a.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        a.setVisible(true);

    }
}

チェススクエア:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class ChessSquare extends JButton
{   
    private int xPosition;  
    private int yPosition;  
    private String filename;

    public ChessSquare(String type, int x, int y)
    {
        super();

        xPosition = x;
        yPosition = y;

       if (type == "emptysquare")
       { filename = "EmptySquare.jpg";}

       if (type == "king")
       { filename = "king.jpg";}

       ImageIcon square = new ImageIcon(filename);  
       setIcon(square);

    }
}

ありがとう。

4

1 に答える 1

3
    x=5;y=8;

例外が発生するため、これを行うことはできません。配列は8x8ですが、オフセットが0であるため、0〜7の値を使用して配列にインデックスを付けます。

    squares[x][y] = new ChessSquare("king", x, y);

そのステートメントは、ChessSquareを配列に追加するだけです。ChessSquareはパネルに追加されません。

とにかく新しいChessSquareを作成したくないと言うように、既存の正方形のアイコンを変更したいだけです。したがって、コードは次のようになります。

ChessSquare piece = squares[4][7];
piece.setIcon( yourKingIcon );

ChessSquareを作成するための基本的なコードが間違っています。アイコンをパラメータとして渡す必要があります。ChessSquareクラスのアイコンを読んではいけません。

于 2013-03-16T00:34:53.697 に答える