Swing Prozentwerte grafisch darstellen - wie?

Status
Nicht offen für weitere Antworten.

Mr.Radar

Mitglied
Hallo,

ich habe folgendes Problem: Ich habe einen Datensatz in dem u.a. auch vier versch. Farbwerte (jeweils ein Prozentwert) gespeichert sind. Ich würde diese in meiner SWING-Gui gerne grafisch in Form eines Balkens in der jeweiligen Farbe in je nach Prozentwert passender Länge darstellen.

Meine Frage:
Bleibt mir nichts anderes über als diese Balken selbst zu zeichnen (ggf. eine eigene Component erstellen, wie in den FAQs oder im sticky tutorial erwähnt), oder gibts da schon was fertiges bzw. irgendwelche anderen Kunstgriffe/Zweckentfremdungen (z.b. über JProgrssBars o.ä.?!) ?
 
Abgesehen davon, dass die Einfärbung der ProgressBar u.U. frickeliger wird, als das mal kurz mit drawRect selbst hinzumalen....
 
Huhu, habe im Moment eh nichts besseres zu tun gewusst 😀

Java:
import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class ColorPanel extends JComponent {

	private static final long serialVersionUID = 20910211819L;
	
	private int r,g,b,a;
	
	public ColorPanel() {
		this(0,0,0,0);
	}
	
	public ColorPanel(int r, int g, int b, int a) {
		this.r = r;
		this.g = g;
		this.b = b;
		this.a = a;
	}
	
	@Override
	public void paintComponent(Graphics gg) {
		int height = getHeight();
		int width = getWidth()*7/8;
		
		gg.setColor(Color.RED);
		gg.fillRect(0,2,width*r/255,height/4-4);
		
		gg.setColor(Color.GREEN);
		gg.fillRect(0,height/4+2,width*g/255,height/4-4);
		
		gg.setColor(Color.BLUE);
		gg.fillRect(0,2*height/4+2,width*b/255,height/4-4);
		
		gg.setColor(Color.BLACK);
		gg.fillRect(0,3*height/4+2,width*a/255,height/4-4);
		
	}

	public int getRed() {
		return r;
	}

	public void setRed(int r) {
		this.r = r;
		repaint();
	}

	public int getGreen() {
		return g;
	}

	public void setGreen(int g) {
		this.g = g;
		repaint();
	}

	public int getBlue() {
		return b;
	}

	public void setBlue(int b) {
		this.b = b;
		repaint();
	}
	
	public int getAlpha() {
		return a;
	}
	
	public void setAlpha(int a) {
		this.a = a;
		repaint();
	}
	
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			@Override
			public void run() {
				ColorPanel pnl = new ColorPanel(50,255,120,170);
				JFrame frame = new JFrame("ColorPanel");
				frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				frame.add(pnl);
				frame.setSize(200,200);
				frame.setLocationByPlatform(true);
				frame.setVisible(true);
			}
		});
	}
}

Vielleicht inspiriert es dich ja Mr.Radar.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben