2013-03-16 4 views
1

나는 조각을 추가하려고하는 간단한 체스 판을 가지고 있습니다. 더 많은 사각형을 추가하지 않고 아이콘 이미지를 변경하고 싶습니다. 어떻게해야합니까?Java 그리드에서 ImageIcon 변경하기

그 사각형에있는 이미지를 덮어 쓰고 싶지만, 지금 내가 가지고있는 것은 더 많은 사각형을 추가하는 것 같습니다.

체스 스퀘어 클래스는 조각 유형과 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); 

    } 
} 

감사합니다.

답변

3
x=5;y=8; 

예외가 발생하기 때문에 그렇게 할 수 없습니다. 귀하의 배열은 8x8이지만 그것은 0-7 값을 사용하여 배열을 색인 할 수 있도록 0 오프셋입니다.

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

모든 내용은 ChessSquare를 배열에 추가하는 것입니다. 그것은 체스 스퀘어를 패널에 추가하지 않습니다.

어쨌든 새 ChessSquare를 만들고 싶지 않다고 말하면서 기존 사각형의 아이콘을 변경하기 만하면됩니다. 따라서 코드는 다음과 같아야합니다.

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

ChessSquare를 만들기위한 기본 코드가 잘못되었습니다. 아이콘을 매개 변수로 전달해야합니다. ChessSquare 클래스의 아이콘을 읽지 않아야합니다.