3

JPanel真ん中に回転する円を作成し、回転の開始/停止を設定したり、表示/非表示に設定したりしたいと考えています。

それを行う方法や既存の例を知っている団体はありますか?

private static class RotatingCirclePanel extends JPanel {        
    protected void paintComponent(Graphics g) {

    }                      
}

これはその一例です。

ここに画像の説明を入力

編集済み:これは最初のバージョンです。gif の例のように作成するのに役立つ人はいますか?

public class ProgressWheelPanel extends JPanel {
private double angleInDegrees = 1;
private Timer rotatingTimer;

public ProgressWheelPanel() {
    rotatingTimer = new Timer(100, new ActionListener() {
        //            @Override
        public void actionPerformed(ActionEvent e) {
            angleInDegrees = angleInDegrees +1;
            if (angleInDegrees == 360) {
                angleInDegrees = 0;
            }
            repaint();
        }
    });
    rotatingTimer.setRepeats(false);
    rotatingTimer.start();
}

@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    Graphics2D g2d = (Graphics2D) g.create();

    rotatingTimer.stop();

    g2d.clearRect(0, 0, getWidth(), getHeight());
    g2d.setBackground(Color.white);
    g2d.setColor(Color.black);
    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.3f));
    g2d.setStroke(new BasicStroke(10f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER));
    g2d.rotate(angleInDegrees * Math.PI / 180.0, getWidth() / 2, getHeight() / 2);
    g2d.drawLine(getWidth() / 2, getHeight() / 2, getWidth() / 2 + 100, getHeight() / 2);
    //**************************************************************************************
    AffineTransform transformer = new AffineTransform();
    transformer.translate(5,5);
    transformer.scale(2,2);
    g2d.getTransform().concatenate(transformer);
    //***************************************************************************************
    g2d.dispose();
    rotatingTimer.start();
}
public void start(){
    rotatingTimer.start();
}
public void stop(){
  rotatingTimer.stop();
}

public static void main(String[] args) {
    final ProgressWheelPanel demo = new ProgressWheelPanel();
    WebButton btnStrat= new WebButton("Start"),btnStop= new WebButton("Stop");
    btnStrat.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            demo.setVisible(true);
            demo.start();
        }
    });
    btnStop.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            demo.stop();
            demo.setVisible(false);
        }
    });
    JFrame frame = new JFrame();
    Container cp = frame.getContentPane();
    cp.add(demo,BorderLayout.CENTER);
    cp.add(btnStrat,BorderLayout.NORTH);
    cp.add(btnStop,BorderLayout.SOUTH);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(500, 500);
    frame.setLocation(500, 500);
    frame.setVisible(true);
}
}  
4

2 に答える 2

3

この回答には、画像に基づいてそのようなアイコンを作成するためのコードスニペットが含まれています。基本的に、コードを使用してアイコンを回転Timerし、回転をトリガーしてアニメーション効果を取得します。

于 2012-07-25T13:20:33.527 に答える
3

たとえば、質問に表示されている画像を使用して、 JFrameまたはJPanel *のいずれかにアニメーションGIFを表示し、画像を含むコントロールの表示/非表示プロパティを設定するだけです。ただし、これは、特定の時点でアニメーションを開始/停止する方法 (私が知っている) を提供しません。

開始/停止を含む完全な機能が必要な場合は、おそらく独自のロールを作成する必要があります。そんな時はコーディングを始めましょう!問題が発生した場合は喜んでお手伝いしますが、コードを書くことはありません。(しかし、これに取り掛かる前に自問してみてください:開始/停止機能が本当に必要なのか、本当に必要なのか? 表示/非表示で間に合わせることができれば、あなたはもう家にいます...)


*)便利なアニメーション GIFに関するリソースは他にもたくさんあります。

于 2012-07-25T13:16:19.210 に答える