Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme.

Automatisches Updaten von Labels etc.

Diskussion: Automatisches Updaten von Labels etc. im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Hallo, ich habe mir ein klein wenig Java selbst beigebracht, ein noch kleineres bisschen in bisher drei Jahren Java-Unterricht ...

Like Tree2Likes
  • 2 Post By metax.

Antwort
Alt 24.08.11, 21:18   #1 (permalink)
 
Registriert seit: 22.08.11
Forks Leistung: 8086
Likes: 26
Standard Automatisches Updaten von Labels etc.

Anzeige

Hallo,

ich habe mir ein klein wenig Java selbst beigebracht, ein noch kleineres bisschen in bisher drei Jahren Java-Unterricht in der Schule gelernt. Die Grundgedanken von OOP glaube ich auch zu verstehen, nur ob ich sie bereits praktisch umsetze, kann ich nicht wirklich einschätzen. Auch wenn ich (solange ich nur Taschenrechner oder textbasierte Rollenspiele schreibe) meist irgendwie an mein Ziel komme, habe ich sehr oft das Gefühl, dass ich völlig umständliches Zeug zusammenschreibe.

Zum Beispiel folgendes:

Update-Funktion   
public void update_All() {


rechnungen.setLevelCap();

jProgressBar1.setMaximum(Held.hp);
jProgressBar1.setValue(Held.khp);
jProgressBar1.setString(Integer.toString(Held.khp) );

jProgressBar2.setMaximum(Gegner.hp);
jProgressBar2.setValue(Gegner.khp);
jProgressBar2.setString(Integer.toString(Gegner.kh p));

jLabel4.setText(Double.toString(Held.skillpunkte)) ;
jLabel8.setText(Double.toString(Held.skillpunkte)) ;
jLabel14.setText(Integer.toString(Held.st));
jLabel16.setText(Integer.toString(Held.exp));
jLabel17.setText("/ " + Integer.toString(rechnungen.lvlcap));
jLabel19.setText(Double.toString(Held.gold));
jLabel21.setText(Integer.toString(Held.stufe));
jLabel40.setText(Integer.toString(Held.dex));
jLabel41.setText(Integer.toString(Held.zp));

jLabel43.setText(Integer.toString(Held.st));
jLabel45.setText(Integer.toString(Held.dex));
jLabel47.setText(Integer.toString(Held.zp));

jLabel61.setText(Integer.toString(Held.st));
jLabel63.setText(Integer.toString(Held.dex));
jLabel65.setText(Integer.toString(held.getHeldAW() ));
jLabel67.setText(Integer.toString(held.getHeldRW() ));
jLabel51.setText(Integer.toString(Gegner.stufe));
jLabel53.setText(Integer.toString(Gegner.st));
jLabel55.setText(Integer.toString(Gegner.dex));
jLabel58.setText(Integer.toString(gegner.getGegner AW()));
jLabel59.setText(Integer.toString(gegner.getGegner RW()));


if (Held.skillpunkte <= 0) {
jComboBox4.setEnabled(false);
jComboBox5.setEnabled(false);
jComboBox6.setEnabled(false);
} else {
jComboBox4.setEnabled(true);
jComboBox5.setEnabled(true);
jComboBox6.setEnabled(true);
}


}


Diese Funktion wird in meinem kleinen simplen Swing-Rollenspiel bei praktisch jedem Klick auf Buttons ausgeführt, sprich ich habe manuell in jedes Button-Event update_ALL(); reingeschrieben.

Dass ich auch nur die Swing-Elemente updaten könnte, die bei dem Klick auf entsprechende Buttons tatsächlich verändert werden, ist mir zwar klar, nur müsste ich dann halt obige Funktion in viiele kleine aufsplitten, was nur noch mehr Arbeit wäre.

Ist es möglich, quasi sowas wie einen Hintergrundprozess laufen zu lassen, der einfach folgendes macht:

if [element].hat-sich-verändert {
[element].update; }


Und zwar automatisch für alle Elemente, ohne für jedes einzelne Textfeld so eine Funktion schreiben zu müssen? Und natürlich auch noch für einen Anfänger umsetzbar?

Gruß, Forks
__________________
Quis custodiet ipsos custodes?
Forks ist offline   Mit Zitat antworten
Alt 24.08.11, 23:05   #2 (permalink)
 
Benutzerbild von metax.
 
Registriert seit: 22.01.07
metax. Leistung: 8086
metax. eine Nachricht über ICQ schicken
Likes: 10
Standard

Naja, es gibt verschiedene Modelle, das zu lösen.

Am einfachsten und für dich am sinnvollsten wäre es wohl, wenn du einzelne Update-Funktionen schreibst, die gleichzeitig die Werte des Helden ändern und die Ausgabe-Controls aktualisieren.
Einzelne Funktionen   
Code:
void increasedHealth(int newMaxHealth) {
  Held.hp = newMaxHealth;
  jProgressBar1.setMaximum(Held.hp);
}

void levelup() {
  Held.skillpunkte += 5;
  jLabel4.setText(Double.toString(Held.skillpunkte)) ;
  jLabel8.setText(Double.toString(Held.skillpunkte)) ;
  jComboBox4.setEnabled(true);
  jComboBox5.setEnabled(true);
  jComboBox6.setEnabled(true);
}

void increasedSkill() {
  jLabel4.setText(Double.toString(Held.skillpunkte)) ;
  jLabel8.setText(Double.toString(Held.skillpunkte)) ;
  if (Held.skillpunkte <= 0) {
    jComboBox4.setEnabled(false);
    jComboBox5.setEnabled(false);
    jComboBox6.setEnabled(false);
  }
}

...


Eine andere Möglichkeit wäre es, den Helden-Objekt verschiedene Listener für Änderungen zu geben, die aufgerufen werden, wenn z.B. die Skillpunkte erhöht werden, und welche die Änderungen an der Oberfläche vornehmen.

Als dritte Möglichkeit könntest du die grafischen Anzeigeobjhekte direkt in der Held-Klasse speichern und bei einer Änderung an einem Attribut das Update der zugehörigen Elemente vornehmen.

Als vierte und letzte Möglichkeit in meiner Liste könntest du auch eine Renderer-Klasse schreiben, die die Status-Anzeigen zu deinem Held als Bild auf den Bildschirm malt und bei einer Änderung des Helden-Objekte diese sofort beim nächste Neuzeichnen des Bildes (also sofort) übernimmt.

mfg, metax.
Tarantoga and Forks like this.
__________________
Wenn keiner zuschaut, teile ich heimlich durch Null!
Meine Homepage: Planet Metax | meine Bilder: DeviantArt | Twitter
metax. ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 24.08.11, 23:44   #3 (permalink)
Themenstarter
 
Registriert seit: 22.08.11
Forks Leistung: 8086
Likes: 26
Standard

Die einfachste deiner Methoden ist so offensichtlich, dass ich mich ein wenig schäme, das nicht einfach gleich so gemacht zu haben
Ich habe bisher so Funktionen wie LevelUp immer in die Klasse des dazugehörigen Objektes geschrieben, also LevelUp() in die Held-Klasse usw. Und ich habe nicht rausfinden können, wie ich GUI-Elemente aus der View-Klasse von der Held-Klasse aus aufrufen kann, siehe weiter unten, dritter Absatz.

Auch das mit den Listenern sollte ich mit ein paar Tutorials hinkriegen. Ich ging bisher davon aus, dass man nur GUI-Objekten Listener geben kann. Wieder was wichtiges gelernt... Das würde das ein oder andere Programm bei mir warscheinlich auf die Hälfte der benutzten Code-Zeilen reduzieren

Das, was du in der dritten Methode beschreibst, wollte ich schon ein paar mal versuchen, ich war dann jedoch mit den vorhandenen Online-Hilfen zu ungeduldig bzw. habe mir noch gar nicht genauer durchgelesen, wie man Dinge in andere Klassen auslagert -> Ich habe bisher meist Netbeans benutzt für GUIs, wo einem automatisch die [projektname]View-Klasse angelegt wird. Ich habe es nie geschafft, Swing-Objekte in eine andere Klasse auszulagern.

Meist fängt diese View-Klasse dann damit an, dass ich in ihr
Code:
    static public Runde runde1 = new Runde();
    static public Spieler mensch = new Spieler();
...
reinschreibe, damit ich wenigstens VON der View-Klasse aus die Funktionen der anderen Klassen aufrufen kann (also z.b. in der View-Klasse "mensch.LevelUp();".

Die Vierte klingt nach dem, was ich dann mal können will, wo ich mir derzeit aber sicher bin, dass meine Programmier-Lust nicht ausreicht, um nicht durch das viele Trial&Error die Motivation zu verlieren. Das ist aber etwas, was ich "irgendwann mal" auch lernen möchte.

Vielen Dank schonmal für die Tips
__________________
Quis custodiet ipsos custodes?

Geändert von Forks (25.08.11 um 00:03 Uhr)
Forks ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » Automatisches Updaten von Labels etc.
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61