2015-01-05 2 views
-1

자습서를 여러 번 읽었으며 JLabel에서 이미지를 생성하지 않는 이유가 궁금합니다. 나는 이미지가 표시되어야하는 모든 것을 가지고 있다고 생각했습니다. 내 프로그램의 다른 그래픽이 간섭 할 수 있습니까? 각 이미지 위에 서로 다른 이미지가 여러 개있는 경우 어떤 이미지가 서로 위에 있는지를 결정하는 데 사용되는 하향식 레이어 시스템 Java가 있습니까?내 JLabel에서 이미지를 생성하지 않는 이유는 무엇입니까?

package scratch; 

import java.awt.Font; 
import javax.swing.*; 
import javax.swing.event.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.awt.Graphics; 
import java.awt.Rectangle; 

import javax.swing.JFrame; 
import javax.swing.JLabel; 

//import statements 
//Check if window closes automatically. Otherwise add suitable code 
public class okay extends JFrame { 

    JPanel jp = new JPanel(); 
    JLabel jl = new JLabel(); 

    public okay(){ 

     jl.setIcon(new ImageIcon("C:\\Users\\ShawnK\\Desktop\\cat.png")); 
     jp.add(jl); 
     add(jp); 
     validate(); 
    } 

    public static void main(String args[]) { 

     JFrame window = new JFrame(); 

     okay t1 = new okay(); 

     window.setSize(640,800); 
     window.setTitle("lets do this"); 
     window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     window.setVisible(true); 


     drawingComponent DC = new drawingComponent(); 


     ai enemy = new ai(); 
     window.add(DC); 
     window.add(t1); 

    } 

} 
+0

'ImageIcon'은 이미지를로드 할 수없는 경우 예외를 생성하지 않습니다. 따라서'new ImageIcon (ImageIO.read (..))'를 대신 사용해보십시오. – Tom

+0

인스턴스가 무엇인지 아십니까? – immibis

답변

6

는 그냥 일반 바닐라 JFrame의 만드는 :

JFrame window = new JFrame(); 

을 당신은 new okay() 객체를 생성하지 않습니다. 그것이 마법에 의해 스스로 생성되지 않을 것이라는 것을 이해하고, 그것을 표시하고 싶다면 코드에서 이것을해야합니다.

drawingComponent DC = new drawingComponent(); 

는 클래스 코드를 표시하지도 : 여담으로

, 나는 drawingComponent이 무엇 창조 모른다. 또한 모두 구성 요소가 추가 될 때까지 JFrame을 표시하지 않도록해야합니다.


또한

  • 학습하고 더 나은 코드를 이해하는 자바는 다른 사람을 도움이 될 것입니다 이렇게 같은 명명 규칙 (우리!)을 따릅니다. 변수 이름은 모두 소문자로 시작해야하며 클래스 이름은 대문자로 시작해야합니다.
  • JFrame을 확장하지 마십시오. 이것과 같은 사소한 프로그램에서는 괜찮을 지 모르지만 확장이 잘되지 않아 코드가 좀 더 복잡 해지고 약간 더 크고 복잡한 프로그램에서도 구석에 페인트 칠하게됩니다.
  • 대신 JPanels 생성을위한 GUI, 원하는 경우 JFrames 또는 JDialogs 또는 JOptionPanes 또는 다른 JPanels에 배치 할 수있는 패널을 준비하십시오. 이렇게하면 코드의 유연성이 향상됩니다.
  • 다시 초기 구성 요소가 모두 추가 될 때까지 JFrame에서 setVisible(true)을 호출하지 마십시오.
  • 예, ImageIO.read(...)을 사용하여 이미지를 BufferedImage로 가져온 다음 ImageIcon에 배치하는 것이 좋습니다. 조금 더 안전하며 (라고 생각하면) 이미지를 더 잘 캐싱 할 수 있습니다.
+1

일반 바닐라 JFrame 롤 –

+0

새로운 argay를 호출하여 새 okay()를 호출했습니다. 아직 이미지를 생성하지 못했습니다. – howevermanyitakes

+1

@howevermanyitakes : 괜찮은 오브젝트를 만들고 있지만 여전히 표시하지 않습니다. 어디에서'setVisible (true)'를 호출합니까? 왜 당신이 그것을 만들고 ** ** 별도의 JFrame? JFrame을 없애고 okay 객체 만 사용하십시오. 변수에 할당 한 다음 표시되도록 설정하십시오. 또한 자바 명명 스키마 (소문자로 시작하는 클래스 이름)는 몇 가지 스윙 튜토리얼을 살펴 보았을 지 모르지만 Java 튜토리얼에 대한 소개가 아직 완료되지 않았다고 말합니다. Swing과 다른 모든 Java 코딩에 필요한 기본 사항부터 시작하십시오. –

관련 문제