Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > Java
You last visited: Today at 08:57

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



refreshing GUI Labels

Discussion on refreshing GUI Labels within the Java forum part of the Coders Den category.

Reply
 
Old   #1
 
EinfachSö's Avatar
 
elite*gold: 76
Join Date: Jun 2012
Posts: 1,043
Received Thanks: 216
refreshing GUI Labels

Hi,

Mein Problem ist kurz erklärt.
Ich habe ein GUI erstellt, in das man 3 Eingaben tätigen kann. Einmal die Länge (einer img-Datei), den Dateinamen und einen counter.
Nun ist es so, dass ich Listen von Daten habe. Diese haben bis 22,5 Mio. Elemente. Wurzel von 22,5 Mio sind ca. 4743. Bei einem quadratischen Bild ergibt das die maximale Seitenlänge.
Der Counter ist dafür da um jedes xte Element zu nehmen. Bei einem Counter von 2 wäre es dann: 22,5 Mio./sqrt(2)= max. Seitenlänge des Bildes.

Nun möchte ich, dass wenn man die Zahl für den Counter in das Textfeld eingibt, dass unter dem Feld für die Länge ein kleiner Text steht, der die maximale Länge angibt. Die Formel von oben habe ich ja. Aber wie kann ich es schaffen, damit meine GUI sich automatisch aktualisiert ohne, dass ich einen Button betätige? Also, ich gebe eine Zahl für den Counter in das Textfeld ein und der Hinweis ändert sich direkt.

Mfg
EinfachSö

Code:
Möglicher Code für das "Feature"

EinfachSö is offline  
Old 04/30/2015, 12:07   #2
 
RecK's Avatar
 
elite*gold: 20
Join Date: Jan 2009
Posts: 304
Received Thanks: 55
Du hast die Optionen einen ActionListener zu registrieren auf deinem TextFeld, hast du es damit versucht?

Weitere Alternativen wäre ein KeyListener der bei jeder Zeicheneingabe überprüft ob der "gewünschte" bzw. erwartete Wert eingegeben wurde. Oder du könntest für jede Zeicheneingabe einen kurzen Timeout registrieren und wenn danach kein neues Zeichen eingegeben wird, aktualisierst du das Label.

Ansonsten habe ich bei StackOverflow vermehrt sowas gesehen:
Code:
textField.getDocument().addDocumentListener(new DocumentListener() {
   public void changedUpdate(DocumentEvent e) {
      // text changed?
   }
   public void removeUpdate(DocumentEvent e) {}
   public void insertUpdate(DocumentEvent e) {
     // text inserted?
   }
});


Habe ich selber aber noch nicht benutzt.
RecK is offline  
Old 05/01/2015, 17:39   #3
 
EinfachSö's Avatar
 
elite*gold: 76
Join Date: Jun 2012
Posts: 1,043
Received Thanks: 216
Quote:
Originally Posted by RecK View Post
Du hast die Optionen einen ActionListener zu registrieren auf deinem TextFeld, hast du es damit versucht?

Weitere Alternativen wäre ein KeyListener der bei jeder Zeicheneingabe überprüft ob der "gewünschte" bzw. erwartete Wert eingegeben wurde. Oder du könntest für jede Zeicheneingabe einen kurzen Timeout registrieren und wenn danach kein neues Zeichen eingegeben wird, aktualisierst du das Label.

Ansonsten habe ich bei StackOverflow vermehrt sowas gesehen:
Code:
textField.getDocument().addDocumentListener(new DocumentListener() {
   public void changedUpdate(DocumentEvent e) {
      // text changed?
   }
   public void removeUpdate(DocumentEvent e) {}
   public void insertUpdate(DocumentEvent e) {
     // text inserted?
   }
});


Habe ich selber aber noch nicht benutzt.
Mit einem ActionListener klappt es nicht. Auch laut anderer Aussagen.
Der KeyListener stellt mich im Moment noch vor eine Herausforderung. Er will das Label nicht ändern. Ich habe gelesen, dass man darauf achten muss, was das Programm fokussiert und es da viele Probleme gibt.

Ich designe das Programm lieber etwas um. Es gibt zum Glück keinen Error, wenn die max. Länge überschritten wird. Das Ergebnis wird bloß unschön. (Bild mit weißen Rändern.
EinfachSö is offline  
Old 05/01/2015, 20:31   #4
 
elite*gold: 8
Join Date: Sep 2014
Posts: 625
Received Thanks: 178
Der ActionListener muss eigentlich funktionieren. Wird nix getriggert, oder was ist das Problem?
qqdev is offline  
Old 05/02/2015, 02:21   #5


 
Garuga's Avatar
 
elite*gold: 0
Join Date: Apr 2008
Posts: 8,649
Received Thanks: 5,465
Nun mit Swing habe ich anfängliche Kenntnisse und bin anfangs auch auf viele Probleme gestoßen.. Soweit ich mich erinnere können zumindest einige initialisierte Komponenten nicht verändert werden. Nutz einfach JavaFX, dort solltest du auf solche Probleme nicht stoßen. Desweiteren wird das in den nächsten Jahren Swing sowieso ersetzen, da es schon länger kein vernünftiges Update hatte und somit vieles veraltet ist..


Zum eigentlichen Problem:

In JavaFX gibt es einen OnChange Event für Textfelder dass jedes mal ausgeführt wird, sobald sich der Inhalt ändert. Du müsstest dann vorher einfach überprüfen ob eine gültige Zahl im Feld steht und deine Berechnung durchführen, die dann einfach den Inhalt des Labels setzt..
Garuga is offline  
Old 05/02/2015, 13:38   #6
 
Zunft's Avatar
 
elite*gold: 0
Join Date: Mar 2013
Posts: 3,185
Received Thanks: 1,317
Code:
jTextField1.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                jTextField1KeyTyped(evt);
            }
        });

private void jTextField1KeyTyped(java.awt.event.KeyEvent evt) {                                     
        jLabel1.setText(jTextField1.getText());
    }
Und das war es auch schon.

Ansonsten benutzt du einfach das ActionPerformed-Event. Da muss der Nutzer zwar mit Enter bestätigen, aber dafür ist es weniger Fehleranfällig.

Ich würde dir auch JavaFX ans Herz legen in Verbindung mit dem Scene Builder. Allerdings solltest du eine gute Struktur im Quellcode haben, da ein größeres Projekt recht schnell unübersichtlich wird.

*Edit: Der DocumentListener ist natürlich um einiges eleganter:

Code:
jTextField1.getDocument().addDocumentListener(new DocumentListener() {
  public void changedUpdate(DocumentEvent e) {
  }
  public void removeUpdate(DocumentEvent e) {
  }
  public void insertUpdate(DocumentEvent e) {
    jLabel1.setText(jTextField1.getText());
  }
});
Zunft is offline  
Reply


Similar Threads Similar Threads
Wie zählt man 2 labels zoder variablen zusammen?
06/23/2012 - AutoIt - 3 Replies
Hallo, Ich bräuchte etwas Hilfe wie man 2 variablen, bzw. 2 Labels zusammenzählt. #include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #region ### START Koda GUI section ### Form=
Rappelz - Using Shell with labels/listview items.
04/11/2012 - .NET Languages - 2 Replies
This is my code : Shell(Label4.Text & "\" & "SFrame.exe /auth_ip:" & ListView1.SelectedItems(0).SubItems(1).Text & " /locale:ASCII /country:US /cash /commercial_shop") When I execute that command, I get an error from SFrame : http://i44.tinypic.com/mhdp5g.jpg What am I doing wrong? What's the correct way?
HELP! SCHWEBENDE LABELS?!?
06/05/2010 - AutoIt - 10 Replies
hi leute! ich hab ne gui gemacht... und kann mir einer sagen wie ich schwebende labels machen kann?? danke im voraus...
Request: Metallurgy Labels in Nekojima
04/04/2010 - Mabinogi - 4 Replies
If anyone can provide a tutorial on how to make this edit, it would be greatly appreciated. The spot do get kind of annoying to see when it's daylight.



All times are GMT +1. The time now is 09:02.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.