4

バックグラウンド

完全な Java 初心者の私は、今日 ( thenewboston.orgで) Java の学習を開始しました。単純なウィンドウ/フォーム/GUI の作成方法、線の描画方法などは既に知っています。

私の目標は、次のような Java ゲージで作成することです。

ここに画像の説明を入力

これは私が.NET C# WPFで作成したゲージで、これをJavaに書き直したいと思います。

主な質問:

透明度のある三角形やその他の形状を作成して回転させる方法は?

次のように Graphics オブジェクトを使用して何かを描画しようとしました:

public void paint(Graphics g){
   g.drawLine(0, 0, 100, 100);
}

しかし、これは間違った方向だと思います。なぜなら、グラフィックスに何かを配置すると、そこにとどまり、移動したり回転したりできないからです。

一種の「アニメーション」を作成するには、グラフィック全体をクリアして再度描画する必要がありますか、それとももっと簡単な方法がありますか?


編集:私はすでにアンチエイリアスの方法を知っています(Hovercraft Full Of Eelsはすでにこれで私を助けてくれました-ありがとう)。


編集2:

私のコードは実際には次のようになります。

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.RenderingHints;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class MainWindow extends JPanel {

    private Point p1 = new Point(100, 100);
    private Point p2 = new Point(740, 450);

    public MainWindow() {
        this.setPreferredSize(new Dimension(800, 600));
    }

    @Override
    protected void paintComponent(Graphics g) {

        super.paintComponent(g);
        drawLines(g);
    }

    private void drawLines(Graphics g)
    {
        Graphics2D g2d = (Graphics2D) g;

        g2d.setColor(Color.DARK_GRAY);
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);     
        g2d.setStroke(new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));

        g.drawLine(p1.x, p1.y, p2.x, p2.y);

    }

    private void display() {
        JFrame f = new JFrame("Main Window");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(this);
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    public static void main(String[] args) {

        new MainWindow().display();
    }

}
4

2 に答える 2

0

線を描画するGraphics.drawLine()と、Graphics インスタンスをサポートしているものに直接ピクセルが書き込まれます。線を回転させたい場合は、回転したときの座標を計算する必要があります。これは、AWT と Swing で物を描画する唯一の方法です。

角度を維持する針クラスを作成し、フレームごとにレンダリングを処理させることができます。

于 2013-06-29T20:56:52.303 に答える