3

私は JApplet (MainClass は JApplet を拡張します)、JPanel (ChartWindow は JPanel を拡張します)、および Grafico クラスを持っています。

問題は、Grafico クラス インスタンスに 2 つの画像 (各パネルに 1 つ) を表示する必要がある 2 つの JPanel があることですが、画像が表示され、しばらくすると画像が消えます。代わりに、灰色の背景 (空の JPanel など) が表示されます。これは、(ChartWindow クラスで行われる) repaint() 呼び出しごとに発生します。

MainClassinit()に含まれる

chartwindow=new ChartWindow();
add(chartwindow)

chartwindow には Grafico インスタンスがあります。

それは ChartWindow のpaintComponent(オーバーライド)

paintComponent(Graphics g)
{
    super.paintComponent(g);
    Image immagineGrafico=createImage(grafico.pannelloGrafico.getWidth()
          ,grafico.pannelloGrafico.getHeight()); 
     Image immagineVolumi=createImage(grafico.pannelloVolumi.getWidth()
      ,grafico.pannelloVolumi.getHeight());
  Graphics2D imgGrafico=(Graphics2D)immagineGrafico.getGraphics();
  Graphics2D imgVolumi=(Graphics2D)immagineVolumi.getGraphics();
  grafico.draw(imgGrafico,imgVolumi,mouseX,mouseY);

  ((Graphics2D)grafico.pannelloGrafico.getGraphics()).drawImage(immagineGrafico,0,0,this);
  ((Graphics2D)grafico.pannelloVolumi.getGraphics()).drawImage(immagineVolumi,0,0,this);
}

grafico の JPanels は、この方法で ChartWindow のコンストラクターに追加されます。

grafico=new Grafico()
................
add(grafico.pannelloGrafico);
add(grafico.pannelloVolumi);

さらに情報が必要な場合は教えてください。ありがとうございます:-)

4

1 に答える 1

2

それらにペイントする場合は、チャート ウィンドウではなく JPanel の paintComponent をオーバーライドする必要があります。何が起こるかというと、JPanel がそれ自体をペイントするたびに、デフォルトのペイントが画像を上書きしてしまうということです。

     class PanelloVolumi extends JPanel{
         //some code

         public void paintComponent(Graphics g){

             //paint one image here
         }

     }

もう一方の JPanel についても同じことを行います。

次に、これらの JPanel のインスタンスをアプレットに追加します。

于 2012-12-15T10:52:31.613 に答える