2012-02-25 14 views
0
import java.awt.*; 
import java.awt.image.BufferedImage; 
import javax.swing.*; 

public class Main 
{ 
    JFrame jf; 
    Main() 
    { 
     jf=new JFrame(); 
     jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     jf.add(new MyCanvas()); 
     jf.pack(); 
     jf.setVisible(true); 
    } 
    public static void main(String[] args) 
    { 
     MyCanvas.img=Toolkit.getDefaultToolkit().createImage("1.jpg"); 
     SwingUtilities.invokeLater(new Runnable() 
     { 
      @Override 
      public void run() 
      { 
       new Main(); 
      } 
     }); 
    } 
} 
class MyCanvas extends JComponent 
{ 
    static Image img; 
    BufferedImage bi; 
    MyCanvas() 
    { 
     setPreferredSize(new Dimension(200,200)); 
     bi=new BufferedImage(200,200,BufferedImage.TYPE_INT_ARGB); 
     Graphics g=bi.getGraphics(); 
     for (int i=0;i<10;i++) 
      for (int j=0;j<10;j++) 
       g.drawImage(img,i*20,j*20,20,20,this); 
    } 
    public void paintComponent(Graphics g) 
    { 
     super.paintComponent(g); 
     g.drawImage(bi,0,0,this); 
     //g.drawImage(img,0,0,this); 
    } 
} 

g.drawImage(img,0,0,this);私はウィンドウに画像を取得します。しかし、このコードでは空のウィンドウが表示されます。ループ内のg.drawImage(img,i*20,j*20,20,20,this);が描画しないのは分かりやすいですが、何が問題なのですか?BufferedImageを使用したdrawImage()は描画されません

答えて

3

は、私は簡単に答えを見つけるために、将来の読者のためにした無関係なものを編集することができます。私はいつもgetResourceまたはgetResourceAsStreamを使用して、適切なディレクトリから正しくロードされたファイルを確保する必要がありました。

class MyCanvas extends JComponent 
{ 
    public static Image loadImage(String s) 
    { 
     try 
     { 
      return ImageIO.read(Main.class.getResource(s)); 
     } 
     catch (Exception ex) 
     { 
      ex.printStackTrace(); 
      return null; 
     } 
    } 
} 
+0

'MyCanvas.img = Toolkit.getDefaultToolkit()。createImage(" 1.jpg ");'この行の何が間違っていますか? 'ImageIO.read()'を使って、私は望みの結果を得ます。 – eXXXXXXXXXXX2

+0

あなたは 'g.drawImage(img、0,0、this); 'と言ってくれますか?事前に作業していましたので、私が言わなければならなかったのは、javaがルートと見なすフォルダ間違った場所。 – annirun

+1

@eXXXXXXXXXXX: 'createImage()'は非同期です。 +1は 'ImageIO'です。 – trashgod

1

1)JLabelhere

2にIconとしてBufferedImageを置く)CustomCanvasであなたのpaintComponent

class MyCanvas extends JComponent { 

    private static final long serialVersionUID = 1L; 

    @Override 
    public Dimension getMinimumSize() { 
     return new Dimension(150, 150); 
    } 

    @Override 
    public Dimension getPreferredSize() { 
     return new Dimension(300, 300); 
    } 

    @Override 
    public void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     g.drawImage(bi,0,0,this); 
    } 
} 
関連する問題