2016-05-21 7 views
1

現在、Javaで簡単なアニメーションを実現しようとしています。 BufferedImageを1つ印刷したいパネルが1つあります。画像の位置を1点に設定し、その寸法を設定します。Java Swing:グラフィックコンポーネントは左上隅のゾーンにのみ表示されます

しかし、イメージの「プリントゾーン」を寸法の左上に配置しているかのように、そのプリントゾーンに属するイメージの一部のみが描画されます。 folowing絵:

http://i.stack.imgur.com/CRmCv.png

ここ

がある..私はそれがpropably私は私の問題に対応する任意の答えを見つけることができませんが行方不明です1つの基本的なものだと思いますし、私はJavaでbeginerていますこの問題に関連するコードの一部:

public abstract class ObjetAnime extends JPanel{ 
protected Point location; 
protected Dimension dim; 
protected BufferedImage picture; 

ObjetAnime(ObjetsPropriete objetProp) 
{ 
    location = new Point(10,10); 
    dim = objetProp.getDimension(); 
    try { 
     picture = ImageIO.read(new File(objetProp.getPath())); 
    } catch (IOException e1) { 
     e1.printStackTrace(); 
    } 

    this.setSize(dim); 
    this.setLocation(location); 
    this.setLayout(null); 
    this.setOpaque(false); 
} 

@Override 
protected void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    Graphics2D g2 = (Graphics2D) g; 
    g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, 
     RenderingHints.VALUE_TEXT_ANTIALIAS_ON); 

    if (picture != null) { 
    g.drawImage(picture, location.x, location.y, this); 
    } 
} 

そして、私が持っているスーパークラス:

public ListeObjets(GConfig gconfig, GPanel jeuPanel) 
{ 
    setListeObjets(new ArrayList<ObjetAnime>()); 
    panel = jeuPanel; 
    for(int i = 0; i < gconfig.getObjetsTab().length; ++i) 
    { 
     switch(gconfig.getObjetsTab()[i].getType()) 
     { 
      case ROND: 
       getListeObjets().add(new Rond(gconfig.getObjetsTab()[i])); 
      break; 
     } 
    } 
    addToPanel(panel); 
} 

public void addToPanel(GPanel jeuPanel) { 
    jeuPanel.setLayout(null); 
    Iterator iterator = getListeObjets().iterator(); 
    ObjetAnime obj = (ObjetAnime) iterator.next(); 
    jeuPanel.add(obj, obj.location); 
    while(iterator.hasNext()) 
    { 
     obj = (ObjetAnime) iterator.next(); 
     jeuPanel.add(obj, obj.location); 
    } 
    System.out.println(obj); 

} 

とオブジェクトのプロパティは次のとおりです。

public ObjetsPropriete() 
{ 
    path = new String("./Images/Boule.png"); 
    dim = new Dimension(32,32); 
    type = Objet.ROND; 
} 

おかげでたくさんの素敵な一日を持っています!

答えて

0

ありがとう、私はこの問題の解決方法を見つけました。

問題の原因は、指定された位置のオブジェクト自体にdrawImageが印刷される間に、objectLocationでdrawImageを使用することでした。

protected void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    Graphics2D g2 = (Graphics2D) g; 
    g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, 
     RenderingHints.VALUE_TEXT_ANTIALIAS_ON); 

    if (picture != null) { 
    g.drawImage(picture, 0, 0, this); 
    } 
} 
3

すべてのオブジェクトには(10,10)の位置があります。したがって、それらのオブジェクトは互いに重なり合っていると思います。だからその声明を取り除く。

jeuPanel.add(obj, obj.location); 

第2パラメータは、add(...)メソッドに何も意味しません。コンポーネントの場所は指定しません。 2番目のパラメータを取り除く。

(私はあなたのコードを理解していれば)と場所を指定したい、あなたのような何か実行する必要があります。

//getListeObjets().add(new Rond(gconfig.getObjetsTab()[i])); 
Rond rond = new Rond(gconfig.getObjetsTab()[i]); 
rond.setLocation(32*i, 32*i); 
getListeObjets().add(rond); 

上記のコードは、パネルに斜めに各オブジェクトを配置するだろうし。

重要な点は、各コンポーネントを一意の場所に設定する必要があることです。

関連する問題