1

Javadoc によると、JComponent.repaint(long)は将来いつか repaint() をスケジュールすることになっています。使用しようとすると、常にすぐに再描画がトリガーされます。私は何を間違っていますか?

import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;

public class Repaint
{
  public static final boolean works = false;

      private static class CustomComponent extends JPanel
  {
    private float alpha = 0;

    @Override
    protected void paintComponent(Graphics g)
    {
      super.paintComponent(g);
      Graphics2D g2d = (Graphics2D) g;
      g2d.setComposite(
        AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha));
      g2d.setPaint(Color.BLACK);
      g2d.fillRect(0, 0, getWidth(), getHeight());
      alpha += 0.1;
      if (alpha > 1)
        alpha = 1;
      System.out.println("alpha=" + alpha);
      if (!works)
        repaint(1000);
    }
  }

  public static void main(String[] args)
  {
    final JFrame frame = new JFrame();
    frame.getContentPane().add(new CustomComponent());
    frame.setSize(800, 600);
    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    frame.setVisible(true);

    if (works)
    {
      new Timer(1000, new ActionListener()
      {
        @Override
        public void actionPerformed(ActionEvent e)
        {
          frame.repaint();
        }
      }).start();
    }
  }
}
4

4 に答える 4

10

Javadocによると、このメソッドでは、指定された時間(後ではなく)に再描画が行われるとのことです。

于 2009-12-10T17:14:08.060 に答える
5

何かを再描画するスケジュールを設定したい場合は、Swing Timer を使用する必要があります。paintComponnt(..) メソッドを使用してペイントをスケジュールしないでください。paintComponent() メソッドがいつ呼び出されるかを制御することはできません。

于 2009-12-10T18:14:53.557 に答える
1

少し検索すると、このパラメーターは派生クラスでは無視されていることがわかります。;)

于 2009-12-15T12:54:41.470 に答える
1

パラメータにはtmと表示されます-更新前のミリ秒単位の最大時間は、すぐには実行されないとは表示されません。javadocsも表示されます。

コンポーネントを再ペイントします。このコンポーネントが軽量コンポーネントの場合、tmミリ秒以内にpaintが呼び出されます。

于 2009-12-10T17:15:56.420 に答える