2009-06-30 4 views

답변

33

내장 된 방법은 없지만 여러 가지 방법이 있습니다. 지금 당장 생각할 수있는 가장 간단한 방법은 다음과 같습니다.

  1. JComponent의 하위 클래스를 만듭니다.
  2. paintComponent(Graphics g) 메서드를 재정 의하여 표시 할 이미지를 그립니다.
  3. Set the content pane이 하위 클래스가 JFrame입니다.

일부 샘플 코드 : 그건 당신이 원하는 거라면이 코드는 JFrame에 맞게 이미지 크기를 조정 처리하지 않는

class ImagePanel extends JComponent { 
    private Image image; 
    public ImagePanel(Image image) { 
     this.image = image; 
    } 
    @Override 
    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     g.drawImage(image, 0, 0, this); 
    } 
} 

// elsewhere 
BufferedImage myImage = ImageIO.read(...); 
JFrame myJFrame = new JFrame("Image pane"); 
myJFrame.setContentPane(new ImagePanel(myImage)); 

참고.

+2

당신은 super.paintComponents를 사용한다() 메소드를. – Sajad

17

이 시도 :

import java.io.File; 
import java.io.IOException; 

import javax.imageio.ImageIO; 
import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 


public class Test { 

    public static void main(String[] args) { 
     JFrame f = new JFrame(); 
     try { 
      f.setContentPane(new JLabel(new ImageIcon(ImageIO.read(new File("test.jpg"))))); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     f.pack(); 
     f.setVisible(true); 
    } 

} 

을하는 방식으로이 컨텐츠 분할 창 컨테이너되지 않는 발생합니다. 일을 추가하려면 JPanel을 서브 클래스 화하고 paintComponent 메소드를 대체해야합니다.

+0

실제로 JLabel (모든 JComponents와 유사)은 Container를 확장합니다. 라벨에 뭔가를 추가하면 어떻게 될지 궁금합니다. –

+0

실제로 아무것도 ... 나는 방금 그것을 시도했다. 예를 들어 JTextArea를 추가 할 수는 있지만 그릴 수는 없습니다. –

+0

레이블에 null 레이아웃이있어 아무 것도 표시되지 않습니다. 레이블의 레이아웃 관리자를 설정하고 구성 요소를 추가 할 수 있습니다. 구성 요소의 크기는 레이블에 추가 된 구성 요소가 아니라 이미지의 크기에 따라 결정된다는 점에 유의하십시오. – camickr

6

Background Panel 클래스를 사용할 수 있습니다. 위에 설명 된대로 사용자 정의 페인팅을 수행하지만 이미지의 크기를 조정하거나 바둑판 식 또는 일반 크기로 표시하는 옵션을 제공합니다. 또한 이미지가있는 JLabel을 프레임의 내용 창으로 사용하는 방법에 대해서도 설명합니다.

0
import javax.swing.*; 

import java.awt.*; 

import java.awt.event.*; 

class BackgroundImageJFrame extends JFrame 
{ 

    JButton b1; 
    JLabel l1; 

    public BackgroundImageJFrame() { 

     setSize(400,400); 
     setVisible(true); 

     setLayout(new BorderLayout()); 

     JLabel background=new JLabel(new ImageIcon("C:\\Users\\Computer\\Downloads\\colorful_design.png")); 

     add(background); 

     background.setLayout(new FlowLayout()); 

     l1=new JLabel("Here is a button"); 
     b1=new JButton("I am a button"); 

     background.add(l1); 
     background.add(b1); 
    } 

    public static void main(String args[]) 
    { 
     new BackgroundImageJFrame(); 
    } 
} 

체크 아웃 painComponent 방법에 대한 아래의 링크

http://java-demos.blogspot.in/2012/09/setting-background-image-in-jframe.html