2014-02-12 88 views
2
public class GUI 
{ 
    JFrame frame; 
    JPanel squares[][]; 


    /* Constructor credited to stackoverflow user ranzy 
     http://stackoverflow.com/questions/2535417/chess-board-in-java */ 
    public GUI() 
    { 
     frame = new JFrame("Chess"); 
     squares = new JPanel[8][8]; 
     frame.setSize(500, 500); 
     frame.setLayout(new GridLayout(8, 8)); 
     frame.setVisible(true); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     for (int i = 0; i < 8; i++) { 
      for (int j = 0; j < 8; j++) { 
       squares[i][j] = new JPanel(); 

       if ((i + j) % 2 == 0) { 
        squares[i][j].setBackground(Color.white); 
       } else { 
        squares[i][j].setBackground(Color.orange); 
       } 
       frame.add(squares[i][j]); 
      } 
     } 

     ImageIcon pawnW = new ImageIcon(getClass().getResource("/images/pawnW.png")); 
     ImageIcon knightW = new ImageIcon("images/knightW.png"); 
     ImageIcon bishopW = new ImageIcon("/images/bishopW.png"); 
     ImageIcon rookW = new ImageIcon("/images/rookW.png"); 
     ImageIcon queenW = new ImageIcon("/images/queenW.png"); 
     ImageIcon kingW = new ImageIcon("/images/kingW.png"); 

     ImageIcon pawnB = new ImageIcon("/images/pawnB.png"); 
     ImageIcon knightB = new ImageIcon("/images/knightB.png"); 
     ImageIcon bishopB = new ImageIcon("/images/bishopB.png"); 
     ImageIcon rookB = new ImageIcon("/images/rookB.png"); 
     ImageIcon queenB = new ImageIcon("/images/queenB.png"); 
     ImageIcon kingB = new ImageIcon("/images/kingB.png"); 

     squares[0][0].add(new JLabel(rookW)); 
     squares[1][0].add(new JLabel(knightW)); 
     squares[2][0].add(new JLabel(bishopW)); 
     squares[3][0].add(new JLabel(queenW)); 
     squares[4][0].add(new JLabel(kingW)); 
     squares[5][0].add(new JLabel(bishopW)); 
     squares[6][0].add(new JLabel(knightW)); 
     squares[7][0].add(new JLabel(rookW)); 

     squares[0][7].add(new JLabel(rookB)); 
     squares[1][7].add(new JLabel(knightB)); 
     squares[2][7].add(new JLabel(bishopB)); 
     squares[3][7].add(new JLabel(queenB)); 
     squares[4][7].add(new JLabel(kingB)); 
     squares[5][7].add(new JLabel(bishopB)); 
     squares[6][7].add(new JLabel(knightB)); 
     squares[7][7].add(new JLabel(rookB)); 

     for (int i = 0; i < 8; i++) 
     { 
      squares[i][1].add(new JLabel (pawnW)); 
      squares[i][6].add(new JLabel (pawnB)); 
     } 

    } 

} 

我無法獲取要顯示的圖標。我已經瀏覽了多個教程,並查看了其他代碼。無法獲取ImageIcon顯示 - 擺動

enter image description here

我嘗試三種不同的方式:

ImageIcon pawnW = new ImageIcon(getClass().getResource("/images/pawnW.png")); 
ImageIcon knightW = new ImageIcon("images/knightW.png"); 
ImageIcon bishopW = new ImageIcon("/images/bishopW.png"); 
+0

你如何編譯和構建你的代碼?用intellij? –

+0

是的,這是正確的 – user2079802

+0

你試過完整的路徑嗎?例如c:/ users/collin/... – ahmedalkaff

回答

2

以前什麼,作爲一個側面說明,setVisible應該是你做最後事情後加入所有組件

使用所有低於getClass().getResource()

String path = "/images/stackoverflow2.png"; 

ImageIcon pawnW = new ImageIcon(getClass().getResource(path)); 

檢查還要檢查以下

正常工作對我來說,那麼正確的,當它,建立它,然後運行它。後構建

enter image description here

文件結構。圖片應該被複制到類路徑

enter image description here

enter image description here

import java.awt.Color; 
import java.awt.GridLayout; 
import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 

public class GUI 
{ 
    JFrame frame; 
    JPanel squares[][]; 

    public GUI() 
    { 
     frame = new JFrame("Chess"); 
     squares = new JPanel[8][8]; 
     frame.setSize(500, 500); 
     frame.setLayout(new GridLayout(8, 8)); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     for (int i = 0; i < 8; i++) { 
      for (int j = 0; j < 8; j++) { 
       squares[i][j] = new JPanel(); 

       if ((i + j) % 2 == 0) { 
        squares[i][j].setBackground(Color.white); 
       } else { 
        squares[i][j].setBackground(Color.orange); 
       } 
       frame.add(squares[i][j]); 
      } 
     } 

     String path = "/images/stackoverflow2.png"; 

     ImageIcon pawnW = new ImageIcon(getClass().getResource(path)); 
     ImageIcon knightW = new ImageIcon(getClass().getResource(path)); 
     ImageIcon bishopW = new ImageIcon(getClass().getResource(path)); 
     ImageIcon rookW = new ImageIcon(getClass().getResource(path)); 
     ImageIcon queenW = new ImageIcon(getClass().getResource(path)); 
     ImageIcon kingW = new ImageIcon(getClass().getResource(path)); 

     ImageIcon pawnB = new ImageIcon(getClass().getResource(path)); 
     ImageIcon knightB = new ImageIcon(getClass().getResource(path)); 
     ImageIcon bishopB = new ImageIcon(getClass().getResource(path)); 
     ImageIcon rookB = new ImageIcon(getClass().getResource(path)); 
     ImageIcon queenB = new ImageIcon(getClass().getResource(path)); 
     ImageIcon kingB = new ImageIcon(getClass().getResource(path)); 

     squares[0][0].add(new JLabel(rookW)); 
     squares[1][0].add(new JLabel(knightW)); 
     squares[2][0].add(new JLabel(bishopW)); 
     squares[3][0].add(new JLabel(queenW)); 
     squares[4][0].add(new JLabel(kingW)); 
     squares[5][0].add(new JLabel(bishopW)); 
     squares[6][0].add(new JLabel(knightW)); 
     squares[7][0].add(new JLabel(rookW)); 

     squares[0][7].add(new JLabel(rookB)); 
     squares[1][7].add(new JLabel(knightB)); 
     squares[2][7].add(new JLabel(bishopB)); 
     squares[3][7].add(new JLabel(queenB)); 
     squares[4][7].add(new JLabel(kingB)); 
     squares[5][7].add(new JLabel(bishopB)); 
     squares[6][7].add(new JLabel(knightB)); 
     squares[7][7].add(new JLabel(rookB)); 

     for (int i = 0; i < 8; i++) 
     { 
      squares[i][4].add(new JLabel (pawnW)); 
      squares[i][6].add(new JLabel (pawnB)); 
     } 

     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable(){ 
      public void run() { 
       new GUI(); 
      } 
     }); 
    } 
} 
+0

真的只有檢查=)這是有效的,因爲這應該工作。 – alex2410

+0

@ Alex2410我想我至少表現出我的努力,所以沒有被浪費。也許OP錯過了一些東西。不期待任何好評(高票):D –

+0

這是'可見'的東西......你能編輯你的答案來反映這一點嗎? – user2079802