2012-10-24 2 views
1

저는 대학생이며 자바로 GUI를 만들었습니다. 지금 나는이 대답 GUI in Java using Swing을보고 지시를 따르고 아직도 아무것도 일어나지 않는다. 여기에 코드가 있습니다. 내가 쓸모없는 쓰레기는 모두 버렸어.스윙에 나타날 이미지를 가져올 수 없습니다.

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

public class Lab4Shell 
{ 
    // this holds the current game board 
     private char[][] gameBoard = new char[7][8]; 
     private JButton[][] gameButtons = new JButton[7][8]; 

     private ImageIcon red = new ImageIcon("Red.jpg"); 
     private ImageIcon black = new ImageIcon("Black.jpg"); 
     private ImageIcon empty = new ImageIcon("Empty.jpg"); 

     private JPanel panel = new JPanel(); 

     private int currentPlayer = 1; 
     private int numMoves = 0; 
     //Why do you want everything in constructor? 
     public Lab4Shell() 
     { 
      CreateWindow(); 
      ResetGame(); 



      // set layout 
      // loop through buttons array creating buttons, registering event handlers and adding buttons to panel 
      // add panel to frame 
      // do other initialization of applet 
     } 

     public static void CreateWindow() 
     { 
      //Sets window title and create window object. 
      JFrame aWindow = new JFrame("Connect Four"); 
      //Set window position and size 
      aWindow.setBounds(500,100,400,400); 
      //What close button does. 
      aWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      //Make window visible. 
      aWindow.setVisible(true); 


     } 

     public static void main(String args[]) 
     { 
      SwingUtilities.invokeLater(new Runnable() 
      { 
       public void run() 
       { 

        Lab4Shell game = new Lab4Shell(); 

       } 
      }); 


     } 
void ResetGame() 
     { 



      JLabel label = new JLabel(); 
      label.setIcon(empty); 
      for(int r=0;r<gameBoard.length;r++) 
      { 
       java.util.Arrays.fill(gameBoard[r],0,gameBoard[r].length,'0'); 



       //loop through board columns 
       for(int c=0;c<gameBoard[r].length;c++) 
       { 

       } 

      } 
      // loop through array setting char array back to ' ' and buttons array back to empty pic 
      // reset currentPlayer and numMoves variables 
     } 
+0

이미지는 저장되어 있습니까? – MadProgrammer

+0

Im Eclipse를 사용 중이고 이미지가 프로그램의 bin 폴더에 있습니다. – DrinkJavaCodeJava

+0

실험을 위해 [여기] (http://stackoverflow.com/a/12228640/230513)와 같이 UI 아이콘을 사용할 수 있습니다. – trashgod

답변

1

반환하면 표시 할 준비가 이미지 보장 -의 원인이되는 당신의 문제.

aWindow.setContentPane(panel); 

을 그리고 나중에 (처럼 resetGame 방법), 당신은 패널합니다 (JLabel 같은) 콘텐츠를 추가 할 것입니다 : 그래서 당신은 createWindow 방법, 당신은 호출 할 필요가

panel.add(empty); 
그것은 당신의 패널에 추가되는

패널의 LayoutManager에 의해 결정된다 (그들 중 많은 사람들이있다 - 기본이 BorderLayout입니다)

다른 유용한 것들 :

  • 일반적으로 생성자에서 개체를 만들고/초기화하고 런타임에 추가/제거/업데이트하십시오.
  • 문제 해결을 위해보고 싶은 내용에 .setOpaque(true).setBackground(Color.blue) 방법을 사용하십시오. 당신이 그것을 보지 않는다면, 무언가가 그것을 감추고 있거나 결코 추가되지 않았다.

행운을 빈다.

+0

정말 고마워요!너의 영웅. – DrinkJavaCodeJava

2

당신이 시도 할 수이

당신은 마 노스 말했듯이 패널로 만든 ImageIcons을 추가하고 이클립스 프로젝트의 src 폴더에있는 이미지 인 것은, 그해야 할
BufferedImage myPicture = ImageIO.read(new File("path-to-file")); 
JLabel picLabel = new JLabel(new ImageIcon(myPicture)); 
add(picLabel); 
+0

+1입니다. 이 [예제] (http://stackoverflow.com/a/3078354/230513)도 참조하십시오. – trashgod

+0

어떤 클래스가 추가 되었습니까? 내 컴파일러는 그것을 좋아하지 않는다. – DrinkJavaCodeJava

2

:

java.net.URL url = getClass().getResource("red.JPEG"); 
ImageIcon red = new ImageIcon(url); 
+0

하지만 ImageSource 인스턴스 변수는 무엇입니까? 교수님이 그걸 사용하길 바래요. 생성자에 넣어야합니까? 그러나 나는 당신의 생각을 시도해 볼 것입니다. – DrinkJavaCodeJava

+0

그래, 이거 시도 해봐. 다음과 같이 생성자를 넣을 수 있습니다. ImageIcon image = new ImageIcon (getClass(). getResource ("/ red.JPEG")); – Drugo

2

리소스가 응용 프로그램에 포함 된 경우 (jar 내에서) Class#getResource을 사용해야합니다.

이미지를로드하는 기본 메커니즘은 ImageIO API입니다. 그것은 이상의 이미지 포맷을 지원 (뿐만 아니라 플러그 아키텍처를 제공)와 read 방법 당신은 결코 당신의 프레임에 아무것도 추가하지했습니다

BufferedImage redImage; 

// ... 

URL url = getClass().getResource("red.JPEG"); 
if (url != null) { 
    redImage = ImageIO.read(url); 
} else { 
    throw new NullPointerException("Unable to locate red image resource"); 
} 
관련 문제