Grafische Auswertung (Ampel-System)

Status
Nicht offen für weitere Antworten.

Vril

Bekanntes Mitglied
Hallo,

ich habe ein Programm geschrieben, das mir int Zahlen von 1 bis 10 berechnet. Jetzt würde ich gerne das jeweilige Ergebnis mit einer Farbskala darstellen. Also ein Balken mit Farbverlauf von rot-gelb-grün. grün links = 1 bis rot rechts = 10. Das Ergebnis der int Zahl von 5 würde z.B. die Farbskala ca. in der Mitte markieren, bei gelb; mit der Zahl 1 würde man ganz links liegen, grün usw.

Also ich hab zwar immer eine unterschiedliche Zahl (1-10), hab aber keine wirkliche Idee wie ich das mit dem "Ampel-System" lösen könnte.

Hat zufällig schon mal jemand was ähnliches gemacht oder hat eine Idee wie man so etwas machen könnte? Hab nämlich keine richtige Vorstellung wie das gehen könnte!
 
Also so sollte das z.B. dann aussehen (für die Zahl 1, 6, 10):
Balken.jpg

Hab aber wirklich keine Idee wie man das machen könnte! Kann mir jemand weiterhelfen?
 
@Wildcard/meez

Wie macht man das genau? Hab wirklich keine Ahnung wie das geht...habt ihr vielleicht irgendwo ein Beispiel?
 
Wildcard hat gesagt.:
z.B. eine Hashmap mit 10 Elementen
Ihr wart auch schon kommunikativer :wink:

Code:
Map<Integer, Color> colors = new Hashtable<Integer, Color>();

colors.put( 1, new Color( 255, 0, 0 );
colors.put( 2, new Color( 240, 20, 0 );
/// usw

Color color3 = colors.get( 3 );

Du kannst auch eine Methode schreiben, welcher diese Farben generiert:
Code:
// ratio: Wert zwischen 0 und 1: 0 ist grün, 1 ist rot, alles andere Zwischenfarben.
public Color createColor( double ratio ){
  return new Color(  (int)(ratio * 255 ), (int)( (1-ratio)*255 ), 0 );
}
 
Hallo,

also mir ist es jetzt gelungen schon mal einen Anfang zu schaffen. Jetzt stehe ich aber vor dem Problem für die entsprechenden Zahlen eine Markierung zu setzen. Ich habe jetzt für den Anfang der einfachheithalber einen int wert = 10 bestimmt. D.h. es sollte unter der Farbe zehn (ganz rechts, rot) irgendeine Markierung gesetzt werden, am besten ein Pfeil und darunter 10 stehen.

Hat zufällig jemand eine Idee wie ich das jetzt machen könnte?

Code:
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;

public class AuswertungVersuch extends JFrame  {
	
	public int wert = 10;
	
	public JLabel eins, zwei, drei, vier,fuenf,sechs,sieben,acht,neun,zehn;
	
	public AuswertungVersuch(){
	
	setSize(500,600);
	setBackground(Color.lightGray);
	setLayout(new GridLayout (3,10));
	
	for (int i = 0; i < 10; i++){
		JLabel platzhalter = new JLabel();
		add(platzhalter);
	}
	
	JLabel eins = new JLabel();
	eins.setOpaque(true);
	eins.setBackground(new Color(0,153,0));
	add(eins);
	
	JLabel zwei = new JLabel();
	zwei.setOpaque(true);
	zwei.setBackground(new Color(51,204,51));
	add(zwei);
	
	JLabel drei = new JLabel();
	drei.setOpaque(true);
	drei.setBackground(new Color(102,254,51));
	add(drei);
	
	JLabel vier = new JLabel();
	vier.setOpaque(true);
	vier.setBackground(new Color(152,255,47));
	add(vier);
	
	JLabel fuenf = new JLabel();
	fuenf.setOpaque(true);
	fuenf.setBackground(new Color(202,255,49));
	add(fuenf);
	
	JLabel sechs = new JLabel();
	sechs.setOpaque(true);
	sechs.setBackground(new Color(255,255,0));
	add(sechs);
	
	JLabel sieben = new JLabel();
	sieben.setOpaque(true);
	sieben.setBackground(new Color(255,204,0));
	add(sieben);
	
	JLabel acht = new JLabel();
	acht.setOpaque(true);
	acht.setBackground(new Color(255,153,52));
	add(acht);
	
	JLabel neun = new JLabel();
	neun.setOpaque(true);
	neun.setBackground(new Color(255,102,6));
	add(neun);
	
	JLabel zehn = new JLabel();
	zehn.setOpaque(true);
	zehn.setBackground(new Color(255,0,0));
	add(zehn);
	
	for (int i = 0; i < 10; i++){
		JLabel auswertung = new JLabel();
		add(auswertung);
	}
	
	setVisible(true);
	}
	
	public void suche(){
		// nur ein Test, natürlich soll ja eine Markierung darunter, ein Pfeil mit
		// der Zahl 10, angebracht werden. Aber auch der Test funzt. nicht ;-(
		if (wert == 10){
			zehn.setText("X");
		}
	}
	
	public static void main (String[] args){
		 new AuswertungVersuch();
		
	}
}
 
1) Du deklarierst oben:
Code:
public JLabel eins, zwei, drei, vier,fuenf,sechs,sieben,acht,neun,zehn;

Doch im Konstruktor deklarierst du nochmal eins etc.

Code:
JLabel eins = new JLabel(); 
..

Mach JLabel weg und initialisier es nur etc.

Dann könntest du dir noch nen MouseListener schreiben:
Code:
   class MouseL extends MouseAdapter {
			public void mouseClicked(MouseEvent event)
			{
//....
			}
	}

Diesen fügst du jeweils zu den Labels als MouseListener hinzu:

Code:
eins.addMouseListener(new MouseL());
...

Im MouseListener musst du nur noch schauen von welchem Label der Event kommt, also event.getSource(). z.B.

Code:
if(event.getSource() == eins) {
					//mach was für klick auf 1....
				}
//etc. pp.

So kriegst du schonmal raus wodrauf geklickt wurde....
 
Thx!
Hab das ganze aber jetzt mit Graphics gelöst, also ohne JLabels! Funktioniert jetzt wunderbar!
 
Ok - aber wenn du es so machst wie oben beschrieben funzt es auch 😉

Musst nur dran denken jedem JLabel den MouseListener hinzuzufügen und in diesem entsprechend getSource() abzufragen.

Aber - jedem das seine... 😉
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben