Javaの道 Javaに関する
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道 >  掲示板 >  掲示板(Graphicsの利用)
閲覧数:417
掲示板(Graphicsの利用)
名前
匿名
題名 Graphicsの利用
質問内容

質問を評価する
(0ポイント)
以下のプログラムを改良して
アナログ時計を作りたいんですけど
時間をCalendarで取得したあとの処理を教えてください
できればソースなども含めて教えていただけると助かり
ます


import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.Rectangle2D;

public class RotatePanel extends JPanel implements 
ActionListener {
    Timer timer = new Timer(1000, this);
    int times = 0;

    public RotatePanel() {
        timer.start(); 
    }

    public void actionPerformed(ActionEvent e) {
        times = (times + 1) % 60;              
        repaint();
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g;

        g2d.setStroke(new BasicStroke(5.0f)); 
        g2d.setPaint(Color.blue);
        g2d.draw(new Polygon(new int[]{0, 0, 40}, 
            new int[]{0, 40, 20}, 3));


        int cx = getWidth() / 2;
        int cy = getHeight() / 2;
        g2d.rotate((2 * Math.PI * times) / 60, cx, 
cy);

        Font font = new Font("Serif", Font.PLAIN, 
20);
        g2d.setFont(font);
        String str = "--------";
    

    
        g2d.drawString(str, cx, cy);
        FontMetrics fm = g2d.getFontMetrics();
        Rectangle2D rec = fm.getStringBounds(str, 
g2d);
        int x = cx + (int) rec.getX();
        int y = cy + (int) rec.getY();
        int w = (int) rec.getWidth();
        int h = (int) rec.getHeight();
        g2d.draw(new Rectangle(x, y, w, h));
    }

    public static void main (String[] args) {
        JFrame jFrame = new JFrame("analog");
        RotatePanel rotatePanel = new 
RotatePanel();
        jFrame.getContentPane().add(rotatePanel, 
BorderLayout.CENTER);
        jFrame.setSize(400, 200);
        jFrame.setVisible(true);
    }
}
質問日時 2013-07-27 19:52:59
名前
匿名
回答内容

回答を評価する
(0ポイント)
ここでは答えが出て来ることはあんまりないよ。
回答日時 2013-07-27 21:00:06
名前
回答内容

回答を評価する
(0ポイント)
Calendar を使うより System.currentTimeMillis と TimeZone の
getOffset の足し合わせから計算の方が簡単でしょう。
例えば長針は 3600000 ms で一回りですからそれを 2πにします。
そして三角関数で x y。
回答日時 2013-07-27 23:22:30

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。



このページのトップへ
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道_CopyrightJavaの道