/* * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template */ package aufgabe8_grafik2d; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.geom.Line2D; import static java.lang.Math.*; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import javax.swing.JComponent; /** * * @author ahren */ public class Zeiger extends JComponent implements Runnable { private static final float DICKE = 4f; private Line2D.Float linie; private BasicStroke stift; private volatile double radius; private volatile float xMitte; private volatile float yMitte; private volatile double xAussen; private volatile double yAussen; private volatile double alpha; private long schlafzeit; private int zeigerlaenge; private ExecutorService eService; private Future task; /** * Initialisiert einen Zeiger. * @param schlafzeit: Ist die Zeit zwischen den Ticks * @param zeigerlaenge: Ist die länge des Zeigers */ public Zeiger(long schlafzeit, int zeigerlaenge) { this.schlafzeit = schlafzeit; this.zeigerlaenge = zeigerlaenge; linie = new Line2D.Float(); stift = new BasicStroke(DICKE); alpha = 0; eService = Executors.newSingleThreadExecutor(); task = null; } @Override public void run() { float delta = 1f; while(true) { synchronized(this) { alpha += 0.1; } this.repaint(); try { Thread.sleep(schlafzeit); } catch (Exception ex) { //lg.severe(ex.toString()); } } } public void start() { if (task == null) { task = eService.submit(this); } } @Override public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2 = (Graphics2D)g; g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); float breite = this.getWidth() - 1; float hoehe = this.getHeight() - 1; radius = (min(hoehe, breite)/2 * 0.9) * 1/ zeigerlaenge; g2.translate(breite/2, hoehe/2); g2.rotate(alpha); xAussen = radius; yAussen = 0; linie.setLine(0, 0, xAussen, yAussen); g2.setStroke(stift); g2.setPaint(Color.RED); g2.draw(linie); } }