java2d

naeko

Mitglied
Hallo,
habe folgende Frage:
ich hab 2 Ringe(siehe Anhang)
Diese erzeuge ich einfach mit Arc2D.
Die Fläche zwischen äußerem und innerem Ring würd ich gerne mit verschiedenen Farben versehen.
Leider sind die ganzen fill(...)-Methoden unpassend dafür.
Wie kann man das geschick realisieren?
 

Anhänge

  • rings.JPG
    rings.JPG
    4 KB · Aufrufe: 23
Vorweg, ich habe keine Ahnung von Java,
aber eine Idee :D
Wie waere es denn, wenn du mit einem um einen Bruchteil vekleinertem Radius einen Kreis ziehst, in der Farbe, in der du es möchtest.


Oder möchtest du nicht alles füllen?
Dann würde ich 2 Linien an den Enden zeichnen, auch in der Füllfarbe, und es dan probieren.

Wie gesagt, kein Plan ob das hinhaut ;)
 
Den Bogen mit dem größeren Durchmesser füllst Du in der gewünschten Farbe aus (fillArc), dann füllst Du einen kompletten Kreis mit dem kleineren Durchmesser mit der Hintergrundfarbe und löschst so den inneren Bereich. Dann noch die Linien wie gehabt darüber zeichnen.
 
@matdacat
super.danke.
jetzt hab ich noch das Problem mit dem Hintergrund:
ich würde gerne den Hintergrund auf weiß setzen. Leider funktioniert das nicht (hab schon alles ausprobiert). Vielleicht überlappen sich irgendwo die Farben?
Hier der Code-Ausschnitt: (g2 ist mein Graphics2D-objekt)
Code:
//antialising on
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
//font normal
g2.setFont(new Font("Arial", Font.BOLD, 14));
//Linienart
g2.setStroke(new BasicStroke(2,BasicStroke.CAP_SQUARE,BasicStroke.JOIN_MITER));
//hier wird der Bogenfarbe gesetzt
g2.setPaint(new GradientPaint(0, 0, Color.red, 250,200, Color.yellow,
	                      false));
//Äußerer Ring
g2.fillArc(x, y, width, height, startAngle, arcAngle);
//Farbe auf weiß setzen für den inneren Ring
g2.setColor(Color.WHITE);
//Innerer Ring
g2.fillArc(x, y, width, height, startAngle, arcAngle);
setColor, setBackgroundColor half alles nicht.
 

Anhänge

  • rings.JPG
    rings.JPG
    4,1 KB · Aufrufe: 25
"Lösche" einfach Deine Zeichenfläche, bevor Du Deine Ringe zeichnest. Und zwar am besten mit der Hintergrundfarbe der Komponente (die solltest Du auch beim Zeichnen des innernen Kreises verwenden), damit zeigt dann setBackgroundColor auch Wirkung :)

Ganz zu Beginn
Java:
g2.setColor(getBackground());
g2.fillRect(0, 0, getWidth(), getHeight());

Und später der innere Kreis (bzw. nur das Segment)
Java:
g2.setColor(getBackground());
g2.fillArc(x, y, width, height, startAngle, arcAngle);

Darf ich Dich fragen, an was für einer Applikation Du bastelst?
 
danke.
ich merk schon da kennt sich einer gut mit Java Graphic aus:

bei Gelegenheit noch eine Frage:
ich will das Segment mit einer Art Übergangsfarbe füllen, d.h. ganz links unten soll es knallrot sein und je weiter man sich nach rechts dem Bogen entlang bewegt soll die Farbe grün werden
Das hier liefert mir nicht ganz genau das was ich will
Code:
g2.setPaint(new GradientPaint(0, 0, Color.red, 250,200, Color.green, false));
Erstens: ist der Farbenübergang nicht so wie ich es mir vorstelle(es geht radikal von rot auf grün->dabei hätt ich gern mal Orange/Gelb dazwischen)
Zweitens: Farbenverlauf passt nicht optimal (ich schätze mal weil es sich hier um linearen Farbverlauf handelt->also für Rechtecke z.B.)
Gibt es das etwas ähnliches nur als radialer Farbverlauf, vielleicht wo man auch für einzelne Segmente Farben bestimmten kann?

P.S. ist ne Studienhausarbeit zum Thema "Graphische Elemente die einen Manager unterstützen":) (eine Art Datenveranschaulichung durch verschiedene Diagramme)
 
ich will das Segment mit einer Art Übergangsfarbe füllen, d.h. ganz links unten soll es knallrot sein und je weiter man sich nach rechts dem Bogen entlang bewegt soll die Farbe grün werden
Leider gibts sowas m.W. im Standardumfang von Java nicht. Ist aber überhaupt kein Problem, wenn Du Deinen Ring in eine bestimmte Anzahl von Segmenten teilst (und somit den Winkel berechnen kannst, den ein Segment aufspannt) und diese Segmente mittels einer for-Schleife und fillArc in unterschiedlichen Farben zeichnest.
 
Habs grad selbst schnell auf einem Halbkreis ausprobiert:

Java:
int segments = 20;
for (int i = 0; i < segments; i++) {
  bufG.setColor(new Color(255 - i*(255/segments), i*(255/segments) , 0));
  bufG.fillArc(200, 200, 100, 100, 180 - (180/segments)*i, -(180/segments));
}

Eine schöne Farbpalette musst Du Dir selbst basteln und z.B. als Color-Array ablegen.
 
Zuletzt bearbeitet:
prima...danke.
Eine weitere Frage:
Angenommen ich hab einen unvollendeten Kreis, z.B:
Code:
Arc2D arc2d = new Arc2D.Double(26,25,50,50,300,200,Arc2D.PIE);
Gibt es eine Möglichkeit die Koordinaten des linken bzw. rechten äußeren Punktes zu berechnen? (auf der Grafik rot markiert)
 

Anhänge

  • ring1.jpg
    ring1.jpg
    2,6 KB · Aufrufe: 110
Zurück