2016-03-29 3 views
1

Я делаю шахматную игру для класса, который у меня есть, и шахматная фигура отображается неправильно.Части Java Chessboard не отображаются правильно

Это мой код:

package SucksLego; 

import java.awt.Container; 
import java.awt.EventQueue; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.ImageIcon; 
import javax.swing.JButton; 
import javax.swing.JFrame; 

import SucksLego.CheesBoard.CaseEchiquier; 
import lejos.nxt.ColorSensor.Color; 

public class ChessBoard2 extends JFrame{ 

    private Container contents; 

    private JButton [][] squares = new JButton [8][8]; 

    private int row = 7; 
    private int col = 1; 

    private ImageIcon piece = new ImageIcon ("chess-pawn-f.png"); 

    public ChessBoard2(){ 

     super("Board"); 

     contents = getContentPane(); 
     contents.setLayout(new GridLayout (8,8)); 

     ButtonHandler buttonHandler = new ButtonHandler(); 

     for (int i = 0; i < 8; i++) { 
      for (int j = 0; j < 8; j++) { 

       squares[i][j] = new JButton(); 


       if((i+j) % 2 != 0){ 
        squares[i][j].setBackground(getBackground().BLACK); 
       } 

       contents.add(squares [i][j]); 
       squares[i][j].addActionListener(buttonHandler); 

      } 
     } 

     squares [row][col].setIcon (piece); 

     setSize(500,500); 
     setResizable(false); 
     setLocationRelativeTo(null); 
     setVisible(true); 

    } 

    private boolean isValidMove(int i, int j){ 

     System.out.println("I: " + i + " J: " + j); 
     return true; 

    } 

    private void processClick (int i, int j){ 

     if(isValidMove(i,j) == false){ 
      return; 
     } 

     squares[row][col].setIcon(null); 
     squares[i][j].setIcon(piece); 
     row=i; 
     col=j; 

    } 

    private class ButtonHandler implements ActionListener{ 

     @Override 
     public void actionPerformed(ActionEvent e) { 

      Object source = e.getSource(); 

      for (int i = 0; i < 8; i++) { 
       for (int j = 0; j < 8; j++) { 

        if(source == squares[i][j]){ 
         processClick(i,j); 
         return; 
        } 

       } 
      } 

     } 

    } 

    public static void main(String[] args) { 
     ChessBoard2 chess = new ChessBoard2(); 
    } 

} 

Размерность иконы 60 х 60.

Значок отображается как очень маленький Штипе:

chess board

ответ

1

Вы не получите изображение, измените свой код и добавьте код ниже в свой конструктор ChessBoard2() под номером super("Board");

try{ 
    URL resource = ChessBoard2.class.getClassLoader().getResource("chess-pawn-f.png"); 
    img = ImageIO.read(resource); 
    piece = new ImageIcon(img); 
} 
catch (IOException e) 
{ 
    e.printStackTrace(); 
} 
Смежные вопросы