2012-03-05 13 views
2

私が書いたペイント方法の上にイメージを挿入する際に問題があります。私は、特定の座標でペイント方法にイメージを重ねるようにしたい。JPanel(JPanelの)ペイントメソッドの上にイメージを追加するにはどうすればよいですか?

マイコード:

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.Polygon; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class testguipaint { 

    public static void main(String[] args) { 
     testguipaint img = new testguipaint(); 
    } 
    public testguipaint() { 
     JFrame frame = new JFrame(); 
     frame.add(crafting, BorderLayout.CENTER); 
     frame.setSize(442, 284); 
     frame.setLocationRelativeTo(null); 
     frame.setResizable(false); 
     frame.setVisible(true); 
     frame.setDefaultCloseOperation(3); 
    } 

    static JPanel crafting = new JPanel() { 
     public void paint(Graphics g) { 
      Color darkGrey = new Color(153, 153, 153); 
      g.setColor(darkGrey); 
      g.fillRect(0, 0, 436, 252); 
      Color lightGrey = new Color(198, 198, 198); 
      g.setColor(lightGrey); 
      g.fill3DRect(3, 3, 430, 246, true); 
      g.setColor(darkGrey); 
      g.fill3DRect(16, 16, 222, 222, true); 
      g.fill3DRect(320, 78, 100, 100, true); 
      g.fillRect(248, 121, 39, 12); 
      Polygon triangle = new Polygon(); 
      triangle.addPoint(287, 103); 
      triangle.addPoint(287, 151); 
      triangle.addPoint(311, 127); 
      g.fillPolygon(triangle); 
      g.setColor(Color.white); 
      g.fill3DRect(88, 16, 3, 222, true); 
      g.fill3DRect(163, 16, 3, 222, true); 
      g.fill3DRect(16, 88, 222, 3, true); 
      g.fill3DRect(16, 163, 222, 3, true); 
      //BufferedImage image = new ImageIO.read(new File("/minecraft jpeg's/Products/Bread.png")); 
      //g.drawImage(image, 44, 191, null); 
      //44, 191 
     } 
    };  
} 
+0

JPanelに背景画像として他の絵を使用していましたか? – mKorbel

+0

いいえ、上に表示されているペイント方法(オーバーラップ)の上に画像を配置する必要があります。 – Lee

+0

あなたが必要であればうまくいくが、この画像はカバーで塗ってもかまいません – mKorbel

答えて

2

ないオーバーレイまたは

1と重複する方法回答)testguipaintは、Javaに表記here又はhere

2ネーミング約TestGuiPaint以上でなければならない)SwingのGUIは、中程度より、コードがinvokeLater()にラップされるべきであるrellated Swing JComponents絵画用Initial Threads

3)はでの詳細方法paintComponent()代わりにpaint()方法があります210

2

ただ、提案、塗料成分中の最後の画像をペイント。これにより、画像を他のオブジェクトの上に描画することができます。また、あなたはたぶん何かをテストしていたことを知っていますが、あなたのクラス名のすべての単語の最初の文字は大文字にする必要があります。

0

MKorbelの提案(1と3)を2つのみ実装し、簡潔にするためにJFrameを拡張し、使用されなかったmainからインスタンスを削除しました。あなたが求めるものはありません。

しかし、Panelが再描画する必要があるたびに、HDDから何度も何度も画像を読み取られることは望ましくありません。そこで、属性を保持するインスタンスを作成します。これはイメージです。

import java.awt.*; 
import javax.swing.*; 
import javax.swing.JPanel; 
import java.awt.image.*; 
import javax.imageio.*; 
import java.io.*; 

public class TestGuiPaint extends JFrame { 

    public static void main (String [] args) { 
     new TestGuiPaint(); 
    } 
    public TestGuiPaint() { 
    super ("TestGuiPaint"); 
     add (new CraftingPanel(), BorderLayout.CENTER); 
     setSize (442, 284); 
     setLocationRelativeTo (null); 
     setResizable (false); 
     setVisible (true); 
     setDefaultCloseOperation (3); 
    } 

    class CraftingPanel extends JPanel { 
    BufferedImage image = null; 
     public CraftingPanel() { 
     try { 
      image = ImageIO.read (new File ("./maeander3.png")); 
     } catch (java.io.IOException ioe) 
     { 
      System.err.println (ioe.getMessage()); 
     }  
     } 

     public void paintComponent (Graphics g) { 
      Color darkGrey = new Color (153, 153, 153); 
      g.setColor (darkGrey); 
      g.fillRect (0, 0, 436, 252); 
      Color lightGrey = new Color (198, 198, 198); 
      g.setColor (lightGrey); 
      g.fill3DRect (3, 3, 430, 246, true); 
      g.setColor (darkGrey); 
      g.fill3DRect (16, 16, 222, 222, true); 
      g.fill3DRect (320, 78, 100, 100, true); 
      g.fillRect (248, 121, 39, 12); 
      Polygon triangle = new Polygon(); 
      triangle.addPoint (287, 103); 
      triangle.addPoint (287, 151); 
      triangle.addPoint (311, 127); 
      g.fillPolygon (triangle); 
      g.setColor (Color.white); 
      g.fill3DRect (88, 16, 3, 222, true); 
      g.fill3DRect (163, 16, 3, 222, true); 
      g.fill3DRect (16, 88, 222, 3, true); 
      g.fill3DRect (16, 163, 222, 3, true); 
     g.drawImage (image, 44, 191, null); 
     } 
    };  
} 

イメージのファイル名を変更したことをご理解いただきありがとうございます。 :)

関連する問題