# Ich bekomme 2 unterschiedliche Kreise trotz gleiche Methodik



## Meru (22. Jan 2009)

Hallo,

ich möchte gern einen Kreis zeichnen lassen sowie auch einen weiteren, welcher als "Schatten" dienen soll. Leider bekomme ich, wie auf dem Bild zu sehen ist, keine 2 gleichen Kreise. Sie unterscheiden sich immer obwohl ich den gleichen daten angebe (abgesehen von der Position). Das mit beigefügte Bild verdeutlicht mein Problem.





Die Klasse, die das Bildchen malen soll

```
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;

import javax.swing.Icon;

public class DemoIcon implements Icon {

	private Color color;

	public DemoIcon(Color color) {
		this.color = color;
	}

	public int getIconHeight() {
		return 25;
	}

	public int getIconWidth() {
		return 25;
	}

	public void paintIcon(Component c, Graphics g, int x, int y) {
		g.setColor(color);
		g.fillOval(x, y, 20, 20);
		
		g.setColor(new Color(color.getRed(), color.getGreen(), color.getBlue(),100));
		g.fillOval(x + 5, y + 5, 20, 20);
	}
}
```

Startroutine

```
import java.awt.Color;

import javax.swing.JFrame;
import javax.swing.JLabel;

public class DemoIconStart extends JFrame{

	public static void main(String[] args){
		new DemoIconStart();
	}
	
	public DemoIconStart() {
		this.setSize(300,300);
		this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		
		JLabel label = new JLabel("", JLabel.CENTER);
		label.setIcon(new DemoIcon(Color.BLACK));
		this.add(label);
		
		this.setVisible(true);
	}
}
```


Was mache ich falsch bzw. wo liegt das Problem?
Oder kann man solche "Schatteneffekte" anders machen? Es geht mir dabei nicht um aufwendige Animationen oder so. Es ist ein einfaches Icon, welches in in eine Tabelle packen will für die aktuell selektierte Row. Also keine Animation.

Ich danke im Voraus für Hilfe 

MfG

Rob


----------



## SlaterB (22. Jan 2009)

bei mir sehen die Kreise gleich aus


----------



## Meru (22. Jan 2009)

Ähm, wie kann das denn sein? Also bei mir sind sie mit dem oben geposteten Code unterschiedlich.

Liegt das vielleicht an der Java-Version (build 1.6.0_10-b33)? Macht Eclipse (von da starte ich die app) da etwas anders?


----------



## SlaterB (22. Jan 2009)

vielleicht Verzerrung durch Bildschirmauflösung?
male direkt daneben drei Linien mit 30, Grad, 45 Grad + 60 Grad
(Treppen: 2 runter + 1 rechts, 1 runter + 1 rechts, 1 runter + 2 rechts)

-------

der erste Kreis ist bisher ja ok,
wie sieht es aus, wenn du den ersten Kreis genau an der Position des zweiten malst?


----------



## Meru (22. Jan 2009)

So, habe jetzt den 1ten Kreis dort gemalt, wo der 2te ist und der sieht immer noch "normal" aus bzw so, wie an Pos 1. Fand ich komisch.

Nun habe ich Kreis 1 mal die Farbe von Kreis 2 gegeben und siehe da, nun isser anders. Es liegt wohl irgendwie an der Farbe. 

beide gleich, aber durch das Alpha sehen beide Kreise so aus, wie im Bild von mir (post1) der 2te Kreis

```
g.setColor(new Color(color.getRed(), color.getGreen(), color.getBlue(),100));
g.fillOval(x, y, 20, 20);
      
g.setColor(new Color(color.getRed(), color.getGreen(), color.getBlue(),100));
g.fillOval(x + 5, y + 5, 20, 20);
```

beide gleich

```
g.setColor(new Color(color.getRed(), color.getGreen(), color.getBlue()));
g.fillOval(x, y, 20, 20);
      
g.setColor(new Color(color.getRed(), color.getGreen(), color.getBlue()));
g.fillOval(x + 5, y + 5, 20, 20);
```

ungleich

```
g.setColor(new Color(color.getRed(), color.getGreen(), color.getBlue()));
g.fillOval(x, y, 20, 20);
      
g.setColor(new Color(color.getRed(), color.getGreen(), color.getBlue()), 100);
g.fillOval(x + 5, y + 5, 20, 20);
```


----------



## Guest (22. Jan 2009)

So, ich habe gerade etwas Zeit gefunden um mich mit dem Problem noch einem zu befassen.
Also warum weshalb und sowieso, KEINE AHNUNG.


```
g.setColor(new Color(color.getRed(), color.getGreen(), color.getBlue(),255)); // color = Color.black
g.fillOval(x, y, 20, 20);

// ist das gleiche wie

g.setColor(Color.black);
g.fillOval(x, y, 20, 20);
```



Wenn ich den nachfolgenden Code verwende, dann sind beide Kreise gleich (bei mir zumindest ^^). Also ich reduziere einfach den Alphawert um 1 bei der Originalfarbe.


```
g.setColor(new Color(color.getRed(), color.getGreen(), color.getBlue(),254)); // color = Color.black
g.fillOval(x, y, 20, 20);

g.setColor(new Color(color.getRed(), color.getGreen(), color.getBlue(),100)); 
g.fillOval(x, y, 20, 20);
```


Das ist vielleicht nicht die schönste Lösung, aber sie funktioniert bei mir. Kannst du (@SlaterB) einmal schauen, ob es bei dir auch noch gleich ist mit der letzt genannten Lösung/dem letztgenannten Code?


----------



## SlaterB (22. Jan 2009)

ich bin derzeit bei der Arbeit an einem anderen Rechner mit anderer Auflösung, 
die ich immer noch mitverantwortlich sehe,
nun 1280x1024

da liefert der Originalcode die wie ich finde schönsten Kreise bisher:





dein aller letzter Code ergänzt um +5  bei der Position sieht so aus





fürs erste Bild heute morgen hatte ich glaube ich 1600x1200


----------



## Meru (22. Jan 2009)

Hum, dann liegt es vielleicht wirklich an der Auflösung, wobei ich hier auf Arbeit auch 1280*1024 habe. Da bekomme ich nicht das Resultat, welches du gepostet hast.
Das zweite Bildchen entspricht exakt dem gleichen, was ich hier auch habe.


Bei deinem ersten Bild, da ist zwar der erste Kreis schöner, dafür aber der 2te nicht. Glaube, dass dann variante 2 besser wäre um es wenigstens einheitlich zu machen.

Jedenfalls vielen Dank für deine Mühe/Tests. Wenn du noch eine andere Idee hast, ich höre sie mir gerne an


----------



## 0x7F800000 (22. Jan 2009)

mal's antialiased und vergiss das problem, kein mensch zählt doch die pixel in irgendwelchen kreisen nach :shock:


----------

