2012-10-21 9 views
4

나는 GUI를 코딩 그리고 난 일부 사진 embedde 사용 싶었지만, 내 메인 프로그램을 삽입하기 전에 나는 그것을 테스트하는 코드를 작성 :프레임에 이미지를 표시하는 방법은 무엇입니까?

public class guikopie extends javax.swing.JFrame{ 
     public guikopie() { 
      a = new javax.swing.JLabel(); 
      setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 
      a.setIcon(new javax.swing.ImageIcon("C:\\Users\\Public\\Pictures\\Sample Pictures\\Tulpen.jpg"));  
      add(a);//here i add it to the jlabel 
      pack(); 
     } 

     public static void main(String args[]){ 
      java.awt.EventQueue.invokeLater(new Runnable() { 
       public void run() { 
        new guikopie().setVisible(true); 
       } 
      }); 
     } 

     private javax.swing.JLabel a; 
    } 

내 질문은 왜이 코드가 표시되지 않습니다 않습니다 사진?

+3

내 컴퓨터에서 작동했습니다. 이미지 경로를 확인하십시오. – Juvanis

+0

어떤 경로를 택 했습니까? – maximus

+0

"src/icon.png"이것은 내 Java 소스 폴더의 이미지입니다. – Juvanis

답변

7

나는 사람들이 반복 나를 미워하는 것 같아요

  • 망가
  • 클래스 이름은 또한 배경이 무엇인지에 따라 Guikopie

즉 캐피탈 문자로 시작 JFrame의 클래스 확장 예를 들어 JPanel의 특정 위치에 추가되는 로고가 JLabel 인 경우에 사용됩니다. 그러나 배경으로 사용되는 로고는 그렇지 않습니다. 더 많은 구성 요소가 추가 될 때마다 이동하기 때문에 배경에 구성 요소를 추가하지 말고 구성 요소에 배경을 추가해야합니다. 귀하의 질문에 관해서는

:

내 질문은 왜이 코드가 사진을 표시하지 않습니다?

귀하의 코드는 나를 위해 완벽하게 작동하므로 그림의 위치가 틀립니다.

가 나는 Image JPanel에 배경을 추가 한 다음 JFrameJPanel를 추가하는 방법을 보여주는 간단한 예제를했다, 그것은 또한 크기 조정 사진에 대한 클래스 ImgUtils을 포함

enter image description here

import java.awt.Dimension; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.Image; 
import java.awt.RenderingHints; 
import java.awt.image.BufferedImage; 
import java.io.IOException; 
import java.net.MalformedURLException; 
import java.net.URL; 
import javax.imageio.ImageIO; 
import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 

public class JFrameWithPicture { 

    public JFrameWithPicture() throws MalformedURLException, IOException { 
     initComponents(); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        new JFrameWithPicture(); 
       } catch (Exception ex) { 
        ex.printStackTrace(); 
       } 
      } 
     }); 
    } 

    private void initComponents() throws MalformedURLException, IOException { 
     JFrame frame = new JFrame("Frame with JPanel and background"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     final Image background = ImageUtils.scaleImage(300, 300, ImageIO.read(new URL("http://images2.layoutsparks.com/1/98191/naruto-14-red-design.jpg"))); 
     final Dimension jpanelDimensions = new Dimension(new ImageIcon(background).getIconWidth(), new ImageIcon(background).getIconHeight()); 

     frame.add(new JPanel() { 
      @Override 
      protected void paintComponent(Graphics grphcs) { 
       super.paintComponent(grphcs); 
       grphcs.drawImage(background, 0, 0, this); 
      } 

      @Override 
      public Dimension getPreferredSize() { 
       return jpanelDimensions; 
      } 
     }); 

     frame.setResizable(false); 
     frame.pack(); 
     frame.setVisible(true); 
    } 
} 

class ImageUtils { 

    public static BufferedImage scaleImage(int width, int height, String filename) { 
     BufferedImage bi; 
     try { 
      ImageIcon ii = new ImageIcon(filename); 
      bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 
      Graphics2D g2d = (Graphics2D) bi.createGraphics(); 
      g2d.addRenderingHints(new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY)); 
      g2d.drawImage(ii.getImage(), 0, 0, width, height, null); 
     } catch (Exception e) { 
      return null; 
     } 
     return bi; 
    } 

    static Image scaleImage(int width, int height, BufferedImage filename) { 
     BufferedImage bi; 
     try { 
      bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 
      Graphics2D g2d = (Graphics2D) bi.createGraphics(); 
      g2d.addRenderingHints(new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY)); 
      g2d.drawImage(filename, 0, 0, width, height, null); 
     } catch (Exception e) { 
      return null; 
     } 
     return bi; 
    } 
} 

또는 당신은 할 수 있습니다 Image#getScaledInstance(int width,int height,int hints)을 사용하여 크기를 조정하려면 this has its perils, 주된 문제는 다음과 같습니다.

Image.getScaledInstance()은 축소 된 이미지를 반환하지 않습니다. 픽셀을 사용하면 많은 시간이 걸릴 수 있습니다.

+1

이미지 사랑 : * * 및 코드 * – Sujay

+1

@Sujay +1 감사합니다. 누가 나루토와 큐 우비를 사랑할 수 없어?! : P –

+0

@DavidKroukamp JFrame을 확장하지 않는 이유는 무엇입니까? –

1
import javax.swing.*; 
public class guikopie extends javax.swing.JFrame{ 
    public guikopie() { 
     a = new javax.swing.JLabel(); 
     JPanel panel = new JPanel(); 
     panel.add(a); 
     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 
     a.setIcon(new javax.swing.ImageIcon("C:\\Users\\Public\\Pictures\\Sample Pictures\\Tulips.jpg")); 
     getContentPane().add(panel); 
     pack(); 
    } 

    public static void main(String args[]){ 
     java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       new guikopie().setVisible(true); 
      } 
     }); 
    } 

    private javax.swing.JLabel a; 
} 

이 코드를 확인하십시오. 경로가 잘못되었을 수 있습니다. P :

+4

OP의 코드에 대한 스 니펫의 문제 해결 차이는 ...? – kleopatra

+0

@kleopatra 올바른 경로? Tulipen.jpg을 (를) 찾을 수 없습니다. 내 컴퓨터에서 발견되지 않습니다 (스페인어가 아님) –

+2

and Vista or Win7 ??? :-) – mKorbel

관련 문제