0

パネル内に画像を表示したい。そこで、画像のパスをこのメソッドに渡し、画像ファイルを開いて、パネル内に画像を描画するための専用クラスのメソッドに渡します。問題は、パネルが常に空のままで、何も表示されないことです。

コードは次のとおりです。

JPanel ImagePane; // I want to add image to this

public void getImagePath(String Path)
{       
    BufferedImage image = null;

    try 
    {
        image=ImageIO.read(new File(Path));
    } 
    catch (IOException e) 
    {
        e.printStackTrace();
    }
    DisplayImage display= new DisplayImage();
    display.getImage(image);
}

private class DisplayImage extends JPanel
{
    private BufferedImage image=null;

    public void getImage(BufferedImage im)
    {
        image=im;
        repaint();
    }

    public void paintComponents(Graphics g)
    {
        g.drawImage(image, 0, 0, image.getWidth() /2, image.getHeight()/2,ImagePane);
    }
}

私は何が欠けていますか?

4

3 に答える 3

5

paintComponentsContainerコンテナ内の各コンポーネントをペイントするために使用されるのメソッドです。paintComponent代わりに、この単一のコンポーネントをペイントする必要があります。

あなたの

public void paintComponents(Graphics g)

する方法

@Override
public void paintComponent(Graphics g) {
   super.paintComponent(g);
   g.drawImage(image, 0, 0, image.getWidth() /2, image.getHeight()/2,ImagePane);
}

@Overrideメソッド署名のチェックに役立つアノテーションの使用に注意してください。

また、呼び出し

super.paintComponent(g);

子コンポーネントを更新します。


あなたの方法では、をどのコンテナにもgetImagePath追加していないようです。DisplayImage代わりに local を作成しますDisplayImageが、使用しないでください。

于 2013-01-22T12:35:49.033 に答える
3

paintComponentをオーバーライドする必要があります

 protected void paintComponent(Graphics g)

しかし、あなたのコードpublic void paintComponents(Graphics g)では正しくないもの を作成しています

于 2013-01-22T12:38:03.103 に答える
2

@Override注釈の使用があります。メソッドをオーバーライドするときはいつでもそれを使用するようにすると、この問題はコンパイル時に解決できます。これを使用する必要があります:

    @Override 
    public void paintComponent(Graphics g)
于 2013-01-22T12:41:07.403 に答える