JProgressbar mit individuellem Start/Endpunkt

stehohrhase

Mitglied
Ich versuche einen JProgressbar zu erstellen und scheiter wohl an der Mathematik ;(

Der Balken soll mir eine Temperatur in einem definierten Bereich anzeigen.
Gegeben sind die Grenzwerte bei 20% und 80%.

Zum Beispiel: 20% = 300 Grad, 80% = 500 Grad.

Dann soll der Balken bei 400 Grad Ist-Temperatur genau in der Mitte stehen (50% Ausschlag).

Ich kriege leider die beiden Werte für 0% und 100% nicht ausgerechnet, um den Balken richtig anzusteuern. Der Ausschlag sollte nicht bei 0 Grad losgehen, sondern skaliert nach den Werten.

Jemand einen Tip ?

LG, stehohrhase
 
wenn die grenzwerte von vornherein klar sind, kannst du doch was machen á la
Java:
JProgressBar jpb = new JProgressBar();
jpb.setMaximum(500);
jpb.setMinimum(300);

//...

jpb.setValue(400);

oder hab ich da was falsch verstanden?
 
Zuletzt bearbeitet:
Wie ungefähr soll das ganze aussehen ?

Java:
package tests;

import java.awt.BorderLayout;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JProgressBar;


	/**
	 * 
	 * @author kaoZ
	 *
	 */

public class Foo {
	
	JProgressBar bar;
	JPanel panel;
	JFrame frame;
	
	public Foo() {
		initFrame();
		setupBar();
		addComponents();
	}
	
	private void initFrame(){
		frame = new JFrame("TestBar");
		frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		frame.setSize(250,80);
		frame.setLocationRelativeTo(null);
		
		panel = new JPanel();
	}
	
	private void setupBar(){
		bar = new JProgressBar();
		bar.setMinimum(0);
		bar.setMaximum(800);
		bar.setStringPainted(true);
		
		bar.setValue(400); // hier könnte man den aktuellen Wert vorab setzen 
	}
	
	private void addComponents(){
		panel.add(bar);
		frame.add(BorderLayout.CENTER, panel);
	}
	
	public void show(){
		frame.setVisible(true);
	}
	
	public static void main(String[] args) {
		new Foo().show();
	}
	
}

So ungefähr oder willst du das anstelle der Prozent der eigentliche Wert angezeigt wird ?



[EDIT]Die Grenzen könntest du dann mit einfachen if-anweisungen setzen[/EDIT]

z.B

Java:
if (bar.getValue() == 300) {
	//Do something
}
else if (bar.getValue() == 500){
	//Do something else
}

oder die etwas hübschere alternative 🙂

Java:
switch(bar.getValue()){
	case 100:
		//do something
	    break;
	case 200:
		//do something
	    break;
		}
 
Zuletzt bearbeitet:
Danke für die schnelle Antwort.
Ich meinte das etwas anders:
Code:
#########################################
0       20        50        80       100 %

Das ist mein Progressbar. Gegeben sind Überwachungsgrenzen, die bei 20% und 80 % liegen.

Sind die Grenzwerte, "20% = 200 Grad" und "80% = 800 Grad",
dann zeigt der Progressbar bei 0% = 0 Grad, 10% = 100 Grad, 50% = 500 Grad, 80% = 800 Grad und 100% = 1000 Grad.

Setze ich nun die untere Grenze auf 700 Grad, dann habe ich "20% = 700 Grad" und 80% = 800 Grad".

Wie parametriere ich nun den Progressbar ?
20% entspricht nun 700 Grad und 80% immer noch 800 Grad - damit hätten wir bei 50% nun 750 Grad.

Und nun tue ich mir schwer, die min und max - Werte des Progressbar zu berechen, um dort eine lineare Anzeige hinzubekommen.
50% ist 750 Grad. und 0% wäre etwa bei 680 Grad und 100% bei etwa 820 Grad. Ist jetzt mal überschlagen....
Genau diese Berechnung kriege ich nicht hin.
 
Zuletzt bearbeitet:
formulier mal wieviel Prozent der balken bei diesen werten anzeigen soll (falls er überhaupt was anzeigen soll):

0, 100, 300, 400, 500, 800, 1000

oder versuch mal dein problem in worte zu fassen. möchtest du den JProgressBar für eine gewisse wertemenge einstellen, oder willst du nach angabe der grenzen deine werte "strecken" bzw. "stauchen"
 
Zuletzt bearbeitet:
Wenn du sagst überwachungsgrenzen, meinst du damit das der bereich zwischen 20 % - 80 % überwacht werden soll oder nur die werte bei 20 % bzw 80% ?

demnach sind die bereiche < 20 % bzw > 80 % unrelevant ?

mir ist noch nicht so ganz klar was genau du da versuchst umzusetzen ^^

Bzw. wonach soll sich dein minimum und maximum denn richten ? Temperatur oder Prozent ?

[EDIT]woher genau bekommst du denn die Werte ?[/EDIT]

Sonst könntest du z.B auch getter und setter für minimum und maximum erzeugen und diese dann setzen

Java:
bar.setMinimum(getMin());
bar.setMaximum(getMax());

//insofern die werte nicht vorbestimmt sein sollen

Java:
public int getMin(){

  int wert = 0;  //hier könnte z.B der wert aus einem Textfeld ausgelesen werden usw...
 
return wert;
}
 
Zuletzt bearbeitet:


In GUI soll es so aussehen:

Unten stehe die beide Grenzwerte - hier 205 Grad und 215 Grad.
Wenn diese Werte erreicht sind, sollte der Ausschlag in etwa bei den Zahlen stehen,
was 20% und 80% vom Anzeigebereich entspricht.

Bei der Solltemperatur, hier 210 Grad soll der Progressbar mittig stehen.
Ich habe diese 3 Werte (MIN, MAX, IST der Temperatur) um Ihn zu generieren.

Normaleweise bräuchte ich min=0 und max=420, damit er bei 210 Grad richtig mittig steht.
Nur sind dann die Grenzen so nah am Wert, das man nichts mehr Unterscheiden kann.

Ich will quasi reinzoomen.
Bis ca. 200 Grad ist kein Ausschlag zu sehen und fängt dann an, bis er bei 210 mittig ist.
Bei 220 Grad etwa bin ich rechts am Anschlag.... Da soll er dann auch bleiben, egal wie hoch die Temperatur ist.

Ich hoffe, ich konnte es so etwas genauer beschreiben...
 
Zuletzt bearbeitet:
so, ich hoffe es ist dass was du meinst, versuche es einfach mal. ich muss weg, ich erklärs heute abend:

Java:
public void setMinMax(JProgressBar bar){
int temperaturMax = 215;
int temperaturMin = 205;
bar.setMaximum(temperaturMax*100/80);
bar.setMinimum(temperaturMin-((temperaturMax*100/80)-temperaturMax));
}
 
Praktisch geht das leider auch nicht:

210 Grad = Balken auf 50 % - ok
205 Grad = Balken auf 46 % - nio, soll 20%
215 Grad = Balken auf 54 % - nio, soll 80 %
 
So, jetzt müsste es stimmen
Java:
	public void setMaxMin(JProgressBar bar){
		int temperaturMax = 215;
		int temperaturMin = 205;
		int delta60Pro = temperaturMax-temperaturMin;
		int delta20pro = delta60Pro*20/60;
		int max = temperaturMax + delta20pro;
		int min = temperaturMin - delta20pro;
		System.out.println(min+" - "+max);
		bar.setMaximum(max);
		bar.setMinimum(min);
		
	}
 
die spanne von deiner unteren und oberen grenze sind 60%... das heißt man hat jeweils 20% davor und dahintewr des vollen, das kriergt man über dreisatz hin
 

Zurück
Oben