Hi,
ich mache gerade meine ersten Versuche mit 2D Grafiken in Java. Bin zur Zeit dabei ein Programm zu erstellen welches dem User einen Tacho anzeigt. Dieser Tacho soll dem User einen bestimmten Status anzeigen. Auf meinem Tacho stehen die Werte 2, 4, 6, 8, 10, 12 und 14. Je nachdem welchen Parameter die paintComponent Methode bekommt soll die Tachonadel jetzt auf einen dieser Werte gesetzt werden. Natürlich sollte es auch möglich sein, dass jemand so etwas wie 2.1 eingibt und auch das korrekt auf dem Tacho angezeigt wird.
Den Tacho habe ich mit den Klassen von awt.geom.* gezeichnet. Die Tachonadel habe ich mit einem Grafikprogramm erstellt und als Grafik in die Mitte des Tachos gesetzt. Wenn ich die Grafik jetzt drehe ändern sich die x und y Werte so dass der Tacho sich verschiebt. Ich habe bis jetzt noch keine Formel gefunden mit der ich die neuen x und y Werte berechnen kann nachdem ich die Grafik gedreht habe.
Hat jemand von euch hier Erfahrung und kann mir einen Tipp geben wie ich das hinbekomme?
Ich lege mal noch den Quellcode meiner paintComponent Methode bei damit ihr sehen könnt wie ich das Thema angefangen habe.
Vielen Dank im Voraus
Gruß
Paladin
ich mache gerade meine ersten Versuche mit 2D Grafiken in Java. Bin zur Zeit dabei ein Programm zu erstellen welches dem User einen Tacho anzeigt. Dieser Tacho soll dem User einen bestimmten Status anzeigen. Auf meinem Tacho stehen die Werte 2, 4, 6, 8, 10, 12 und 14. Je nachdem welchen Parameter die paintComponent Methode bekommt soll die Tachonadel jetzt auf einen dieser Werte gesetzt werden. Natürlich sollte es auch möglich sein, dass jemand so etwas wie 2.1 eingibt und auch das korrekt auf dem Tacho angezeigt wird.
Den Tacho habe ich mit den Klassen von awt.geom.* gezeichnet. Die Tachonadel habe ich mit einem Grafikprogramm erstellt und als Grafik in die Mitte des Tachos gesetzt. Wenn ich die Grafik jetzt drehe ändern sich die x und y Werte so dass der Tacho sich verschiebt. Ich habe bis jetzt noch keine Formel gefunden mit der ich die neuen x und y Werte berechnen kann nachdem ich die Grafik gedreht habe.
Hat jemand von euch hier Erfahrung und kann mir einen Tipp geben wie ich das hinbekomme?
Ich lege mal noch den Quellcode meiner paintComponent Methode bei damit ihr sehen könnt wie ich das Thema angefangen habe.
Code:
protected void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
Image tacho=null;
try {
tacho = ImageIO.read(ClassLoader.getSystemResource( "tacho.png" ));
} catch (IOException e) {
e.printStackTrace();
}
Font normalfont = new Font("Arial", Font.BOLD, 14);
g2.setFont(normalfont);
g2.setStroke( new BasicStroke( 2,
BasicStroke.CAP_SQUARE , BasicStroke.JOIN_MITER ) );
Ellipse2D ellipse2d = new Ellipse2D.Double(20,10,250,240);
Ellipse2D center = new Ellipse2D.Double(135,120,20,20);
Line2D w_line = new Line2D.Double(20,130,50,130);
Line2D n_line = new Line2D.Double(145,10,145,40);
Line2D o_line = new Line2D.Double(240,130,270,130);
Line2D sw_line = new Line2D.Double(80,198,60,218);
Line2D so_line = new Line2D.Double(230,218,210,198);
Line2D nw_line = new Line2D.Double(51,51,71,71);
Line2D no_line = new Line2D.Double(217,70,237,50);
Rectangle2D gesamt1 = new Rectangle2D.Double(130, 210, 10, 20);
Rectangle2D gesamt2 = new Rectangle2D.Double(142, 210, 10, 20);
Rectangle2D gesamt3 = new Rectangle2D.Double(154, 210, 10, 20);
Rectangle2D gesamt_rahmen = new Rectangle2D.Double(128, 208, 39, 24);
g2.drawString(tachoname, 115, 110);
g2.drawString(var1, 90, 190);
g2.drawString(var2, 60, 135);
g2.drawString(var3, 80, 85);
g2.drawString(var4, 142, 65);
g2.drawString(var5, 195, 85);
g2.drawString(var6, 215, 135);
g2.drawString(var7, 190, 190);
g2.draw(ellipse2d);
g2.draw(center);
g2.draw(w_line); //West
g2.draw(o_line); //Ost
g2.draw(n_line); //Nord
g2.draw(sw_line); //Südwest
g2.draw(so_line); //Südost
g2.draw(nw_line); //Nordwest
g2.draw(no_line); //Nordost
g2.draw(gesamt_rahmen);
g2.fill(gesamt1);
g2.fill(gesamt2);
g2.draw(gesamt1);
g2.draw(gesamt2);
g2.setColor(Color.white);
g2.fill(gesamt3);
g2.draw(gesamt3);
g2.drawString(gesamtzahl_pos1, 132, 225);
g2.drawString(gesamtzahl_pos2, 144, 225);
g2.setBackground(Color.black);
g2.setColor(Color.black);
g2.drawString(gesamtzahl_pos3, 156, 225);
AffineTransform aft = new AffineTransform();
int pos = 0;
int basisx = 134;
int basisy = 120;
aft.rotate(Math.toRadians(pos),136,52);
g2.setTransform(aft);
g2.drawImage(tacho,x,y,this); //14
}
Vielen Dank im Voraus
Gruß
Paladin