Ich bekomme 2 unterschiedliche Kreise trotz gleiche Methodik

Status
Nicht offen für weitere Antworten.

Meru

Bekanntes Mitglied
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
Code:
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
Code:
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
 
S

SlaterB

Gast
bei mir sehen die Kreise gleich aus
test.JPG
 

Meru

Bekanntes Mitglied
Ä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?
 
S

SlaterB

Gast
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

Bekanntes Mitglied
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
Code:
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
Code:
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
Code:
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);
 
G

Guest

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

Code:
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.

Code:
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?
 
S

SlaterB

Gast
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:
test2.JPG


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


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

Meru

Bekanntes Mitglied
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

Top Contributor
mal's antialiased und vergiss das problem, kein mensch zählt doch die pixel in irgendwelchen kreisen nach :shock:
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben