Frage von Belus911, 27

Wie und fügt man bei einer Scrollbar(AWT) einen Variablen schieberwert und die paint-Methode ein (Netbeans;Java)?.

die paint-Mehtode, geht das auch irgendwie Automatisiert? Oder nur Manuell? sprich -> public void paint (Graphics g) { ....?

zum Variablen schieberwert habe ich leider keinen Ansatz -.-

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von KnusperPudding, Community-Experte für Java, 27

Kannst du ein Beispiel für dein Problem beisteuern? - Deine Fragestellung ist leider nicht nachvollziehbar. - Bitte werde etwas konkreter:

Welche Komponente möchtest du modifizieren? Was soll wann wie erfolgen? Was passiert derzeit? 

Am besten mit einem nachvollziehbarem kleinen  Code-Beispiel.

Kommentar von Belus911 ,

Das war wohl schon zu spät für eine verständliche Fragestellung meinerseiters...

Also, ich soll laut Aufgabenstellung soll man einen Celsius zu Fahrenheit "Converter" schreiben, der mithilfe eines Rollbalken/Scrollbar die Zahlen ändern kann

(Die Lösung habe ich, aber ich möchte es verstehen und nicht stupide abschreiben)

So was ich bisher getan habe:

private void scrollbar1AdjustmentValueChanged(java.awt.event.AdjustmentEvent evt) {

}

 public void paint (Graphics g) {

f=(c*(9/5f)+32);

g.drawString("Celsius ist " + C, 50, 50);

g.drawString("Fahrenheit ist " F, 50, 70); }

Cund F steht für Celsius und Fahrenheit, aber ich weiß nicht wie ich es mit einer Scrollbar verbinden kann? Würde ohne scrollbar für x einfach einen Wert manuell einsetzen.

float C = X;

float F = =(c*(9/5f)+32);

 

Kommentar von KnusperPudding ,

Ich glaub ich verstehe langsam was du vor hast. - Aber da bist du mit "Scrollbar" auf dem Holzweg, das ist das falsche Control für dein vorhaben.

Du benötigst kein Scrollbar, sondern ein JSlider. - Bei einem Slider kannst du einen Changelistener anfügen, der bei Änderungen am Slider-Wert reagiert, wodurch du z.B. ein Label mit dem Wert des Sliders aktualisieren kannst:

JSlider slider = new JSlider(JSlider.HORIZONTAL, 0, 50, 25);        
slider.setMinorTickSpacing(2);        
slider.setMajorTickSpacing(10);        
slider.setPaintTicks(true);        
slider.setPaintLabels(true);

slider.addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { label.setText(String.valueOf(slider.getValue())); } });

Wie du nun mit F° und C° das ganze gestaltest, bleibt dir überlassen.


Beispiel-Code für einen Slider findest du z.B. hier:

http://www.java2s.com/Code/Java/Swing-JFC/AnexampleofJSliderwithdefaultlabels.ht...

Kommentar von Belus911 ,

Das hab ich auch schon gelesen, aber unser Lehrer hat diesen "MusterCode" erstellt, aber ich kann da einfach 2 Sachen nicht nachvollziehen, warum das public vor dem float? wie kommt man auf "c=scrollbar1.getValue(); repaint();"

public float f=0;

public float c=0;

private void scrollbar1AdjustmentValueChanged(java.awt.event.AdjustmentEvent evt) {

c=scrollbar1.getValue();

repaint(); }

public void paint (Graphics g) {

f=(c*(9/5f)+32);

g.drawString("Celsius ist " +c, 50, 50);

g.drawString("Fahrenheit ist " +f, 50, 70); }

Kommentar von KnusperPudding ,

Oh je, der Klassiker. Wenn man gezwungen ist, dem Lehrer seinen Code zu verstehen. 

Leider fehlt mir bei deinem Snippet leider der Zusammenhang zu einer bestimmten Komponente. 

zu welchem Element gehört deine Methode?

Zu deinen Fragen: ich verstehe nicht, weshalb man die float variablen als public kennzeichnen muss, ist mir auch nicht begreiflich. ich erteile variablen nur den Zugriff, den sie wirklich benötigen.

Der Teil mit: c=scrollbar1.getValue()

frägt vom Element scrollbar per GetValue dessen wert ab und schreibt ihn in die float variable c.

repaint() zeichnet das Grafikelement neu, was sinn macht, wenn man etwas daran ändert, aber das optisch noch nicht aktualisiert wurde.

Kommentar von Belus911 ,

Danke für deine Ausführliche Hilfe!

meinst Du/Sie als Methode "public void init() {" ?

Also kann ich das "float " weglassen in dem Fall ?

Dann noch eine Frage zu "schieberwert=scrollbar1.getValue();"

Ist das ein "Fertiger" Befehl wie " private void scrollbar1AdjustmentValueChanged(java.awt.event.AdjustmentEvent evt) {"  der Automatisch kommt wenn man die Scrollbar reinzieht oder muss man den einfach auswendig kennen so wie "g.drawString(..."?

Weil wenn ich den manuell eingebe/kopiere erkennt Netbeans diesen nicht?  Und somit geht das ganze Applet nicht

Vielen Dank für die tolle Hilfe!

Kommentar von Belus911 ,

hat sich geklärt! Vielen Dank!

Kommentar von KnusperPudding ,

Super - Und danke für den Stern.

Trotzdem noch:

public void init() meinte ich eigentlich nicht, sondern: Handelt es sich um eine eventuell überschriebene Methode einer Komponente? z.B. irgend eines Scrollbar Elements? - Da die Methode ja irgendwo aufgerufen wird.

Zu: "Also kann ich das "float " weglassen in dem Fall ?"

Wenn Variablen deklariert werden, muss immer der Datentyp der klasse angegeben werden, daher nein.

Ist das ein "Fertiger" Befehl wie " private void scrollbar1AdjustmentValueChanged(java.awt.event.AdjustmentEvent evt) {"  der Automatisch kommt wenn man die Scrollbar reinzieht oder muss man den einfach auswendig kennen so wie "g.drawString(..."?

ich weiß es nicht, da ich nicht weiß wo diese Methode steht, oder zu welcher Klasse diese Methode gehören soll. das ist der Punkt, der mich bei deiner eigentlichen Frage interessierte.

wenn diese Methode z.b. Bestandteil einer existenten Klasse ist, kann man diese per z.B. per Override 'überschreiben', sodass die Methode dann statt der eigentlichen Methode etwas anderes ausführt. - Was dann deinem Verständnis von einem "Fertigen Befehl" entsprechen dürfte.

auswendig musst du eigentlich gar nicht so viel wissen, da Entwicklungsumgebungen dir eigentlich alle Informationen bereitstellen: Welche Methoden du überschreiben kannst, welche sie besitzen, etc.

Weil wenn ich den manuell eingebe/kopiere erkennt Netbeans diesen nicht?  Und somit geht das ganze Applet nicht

Kommt drauf an wo du etwas rein kopierst. Wenn du die komplette Klasse Bereitstellst, könnten wir das herausfinden, weshalb.

Antwort
von PerfectMuffin, 24

1. "Variablen schieberwert"!? Lies die APIdocs...

2. "paint Methode ... automatisiert"? wtf hast du vor?

Keine passende Antwort gefunden?

Fragen Sie die Community