2013-04-11 2 views
0

그래서 수업을 위해이 과제를하고 있습니다. X 또는 Y 이미지를 무작위로 3x3 JLabels 가진 JFrame 채우기 가정합니다. 나는 작은 이미지들을 구글에서 가져 와서 이클립스에서 자바 프로젝트의 소스 폴더에 넣고 "X.jpeg"와 "O.jpeg"라고 불렀다..jpeg로드하고 JLabel로 설정 하시겠습니까?

"X"와 "O"라는 문자열을 사용할 때이 기능이 작동하지만 이미지를 작동시키는 방법을 알 수는 없습니다. 어떤 조언도 대단히 감사하겠습니다.

좋아, 그럼 지금 사용하고 있습니다. 나는 이미지로 JFrame에 Jlabel을 추가하는 것에 관한 것들이다 !!

인용문

import java.awt.*; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.net.URL; 
import javax.imageio.ImageIO; 
import javax.swing.*; 


public class Chapter12_7 extends JFrame { 

public static void main(String[] args) { 
    Chapter12_7 frame = new Chapter12_7(); 
    frame.setSize(400, 400); 
    frame.setTitle("Chapter12_7"); 
    frame.setLocationRelativeTo(null); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setVisible(true); 
} 
public Chapter12_7(){ 

    BufferedImage x = ImageIO.read(new File("/X.jpeg")); 
    BufferedImage o = ImageIO.read(new File("/O.jpeg")); 
    JPanel p1 = new JPanel(); 
    p1.setLayout(new GridLayout(3, 3)); 
    add(p1); 


    int[] ran = new int[9]; 

    for(int j = 0; j < 9; j++){ 
     ran[j] = (int) (Math.random() * 2); 
    } 

    for (int i = 0; i < 9; i++){ 
     if(ran[i] == 0){ 
      p1.add(new JLabel(x , JLabel.CENTER)); 
     } 
     else 
      p1.add(new JLabel(o , JLabel.CENTER)); 
    } 
} 

}

답변

1

new ImageIcon("X.jpeg");를 사용하지 마십시오, 이것은 X.jpeg 당신이 실행 어디 같은 컨텍스트 내에서 HD에 존재하는 파일이 있다고 가정 에서 프로그램. ImageIcon 또한 뭔가 잘못되면 예외가 발생하지 않으므로 매우 귀찮습니다.

파일이 Jar 파일 내에 저장되어있는 경우 getClass().getResource("/X.jpeg")을 대신 사용해야합니다.

이미지를 읽으려면 도 사용해야합니다. 이미지를 읽을 수없는 경우 (다른 것들 중에서) 예외가 발생합니다.

자세한 내용은 Reading/Loading an Image을 참조하십시오.

또한 이클립스에서 리소스는 resources 폴더에 저장해야하며, 자동으로 애플리케이션 Jar에 추가된다고 생각한다. 내가 이클립스를 사용하지 않기 때문에 그들이 소스 디렉토리에 있다면 무슨 일이 일어날지는 모르겠다.

+0

이제 BufferedImage를 사용하여로드하지만 새 JLabel (x) 또는 JLabel (o)을 추가하려고하면 컴파일 오류가 발생합니다. JLabel은 BUfferedImage 데이터 유형을 좋아하지 않는 것처럼 보이고 문자열을 제안합니다. –

+1

'새로운 JLabel (ImageIcon (ImageIO.read (getClass(). getResource ("/ X.jpeg"));'와 같은 것을 사용하면, 원한다면 개별 문장으로 나눌 수있다.) – MadProgrammer

관련 문제