Join fachinformatiker.de Forum Now
Ergebnis 1 bis 8 von 8

Buttons in Java

Diskussion über Buttons in Java in Java der Kategorie Programmierung; Hallo zusammen, ich muss mich nun doch wieder an Euch wenden, weil ich wirklich nicht weiter weiss. Ich habe ein ...

  1. #1
    ces
    ces ist offline
    Reg.-Benutzer
    Reg.-Datum
    05.03.2008
    Beiträge
    23

    Standard Buttons in Java

    Hallo zusammen,

    ich muss mich nun doch wieder an Euch wenden, weil ich wirklich nicht weiter weiss.

    Ich habe ein Programm erstellt welches durch unterschiedliche Buttons ein Onlinemessgerät konfiguriert und verwaltet.

    Nun möchte ich dass wenn ein Button gedrückt wurde, dass die anderen nicht verwendet werden können für ca 10 Sekunden (länge jedes Buttons zum konfiguerieren)

    Ich habe es nun so versucht.

    Beispiel eines Buttons:

    this.ButtonStandard.setEnabled(false);
    this.ButtonFine.setEnabled(false);
    this.ButtonSwitchOutput.setEnabled(false);
    this.ButtonMinMax.setEnabled(false);
    this.ButtonGetConfigFile.setEnabled(false);
    this.ButtonGetFiles.setEnabled(false);
    this.ButtonDeleteMeassurement.setEnabled(false);
    this.ButtonFirmware.setEnabled(false);
    this.ButtonGetFtpFile.setEnabled(false);
    this.ButtonSetFtpFile.setEnabled(false);

    this.ButtonStandard.paintImmediately(0, 0, 500, 600);
    this.ButtonFine.paintImmediately(0, 0, 500, 600);
    this.ButtonSwitchOutput.paintImmediately(0, 0, 500, 600);
    this.ButtonMinMax.paintImmediately(0, 0, 500, 600);
    this.ButtonGetConfigFile.paintImmediately(0, 0, 500, 600);
    this.ButtonGetFiles.paintImmediately(0, 0, 500, 600);
    this.ButtonDeleteMeassurement.paintImmediately(0, 0, 500, 600);
    this.ButtonFirmware.paintImmediately(0, 0, 500, 600);
    this.ButtonGetFtpFile.paintImmediately(0, 0, 500, 600);
    this.ButtonGetFtpFile.paintImmediately(0, 0, 500, 600);

    try
    {
    Thread.sleep(10000);
    }
    catch (InterruptedException e)
    {
    System.out.println("geht nicht");
    }

    this.ButtonStandard.setEnabled(true);
    this.ButtonFine.setEnabled(true);
    this.ButtonSwitchOutput.setEnabled(true);
    this.ButtonMinMax.setEnabled(true);
    this.ButtonGetConfigFile.setEnabled(true);
    this.ButtonGetFiles.setEnabled(true);
    this.ButtonDeleteMeassurement.setEnabled(true);
    this.ButtonFirmware.setEnabled(true);
    this.ButtonGetFtpFile.setEnabled(true);
    this.ButtonSetFtpFile.setEnabled(true);

    }

    Dies Funktioniert auch soweit. Die Anwendung steht 10 Sekunden und die Buttons sind ausgegraut und werden danach wieder angezeigt. So soll es auch sein, was mich nun stört ist:

    Wenn die Buttons ausgegraut sind und ich trotzdem auf einen oder zwei Buttons drücke (Buttons sind ausgegraut) dann werden diese sofort gestartet wenn die Buttons wieder enabled sind und dass darf einfach nicht sein.

    Viele Danke schonmal im Voraus


  2. #2
    Moderator Java
    Reg.-Datum
    24.07.2007
    Beiträge
    8.290

    Standard

    Verwende bitte Code-Tags!

    @Topic: Das ist klar, Du "pausierst" Deine Anwendung, d.h. alle Aktionen werden auch pausiert und nicht "verworfen". Ich würde aber generell die Anwendung nicht anhalten, sondern nur die Aktionen der Buttons unterbinden, d.h. der Ansatz ist in den Listener der Buttons.

    Pausierende Anwendungen sind sehr "unschön in der Bedienung"
    We can only see a short distance ahead, but we can see plenty there that needs to be done. (Alan Turing)
    http://flashpixx.de

  3. #3
    ces
    ces ist offline
    Reg.-Benutzer
    Reg.-Datum
    05.03.2008
    Beiträge
    23

    Standard Buttons

    Und wie meinst du das ?

    Ich steht grad komplett aufn Schlauch

  4. #4
    Moderator Java
    Reg.-Datum
    24.07.2007
    Beiträge
    8.290

    Standard

    Du willst ja, dass die Aktionen während einer gewissen Zeit nicht statt finden, d.h. Du darfst den Code im Listener nicht ausführen. Im Moment "friest" Du nur die Anwendung ein.

    D.h. ein Button wird geklickt, dann wird ein Timer gestartet, der eben eine gewisse Zeit läuft, während der Timer läuft darf der Code im Listener nicht ausgeführt werden (anders: ist der Timer aktiv, darf der Listener nichts machen).
    We can only see a short distance ahead, but we can see plenty there that needs to be done. (Alan Turing)
    http://flashpixx.de

  5. #5
    Reg.-Benutzer Avatar von speedi
    Reg.-Datum
    01.10.2004
    Ort
    Ottobrunn
    Beiträge
    809

    Standard

    Code:
    new Thread(){
    public void run(){
    DeineHauptKlasse.this.ButtonStandard.setEnabled(false);
    DeineHauptKlasse.this.ButtonFine.setEnabled(false);
    DeineHauptKlasse.this.ButtonSwitchOutput.setEnabled(false);
    DeineHauptKlasse.this.ButtonMinMax.setEnabled(false);
    DeineHauptKlasse.this.ButtonGetConfigFile.setEnabled(false);
    DeineHauptKlasse.this.ButtonGetFiles.setEnabled(false);
    DeineHauptKlasse.this.ButtonDeleteMeassurement.setEnabled(false);
    DeineHauptKlasse.this.ButtonFirmware.setEnabled(false);
    DeineHauptKlasse.this.ButtonGetFtpFile.setEnabled(false);
    DeineHauptKlasse.this.ButtonSetFtpFile.setEnabled(false);
    
    
    DeineHauptKlasse.this.ButtonStandard.paintImmediately(0, 0, 500, 600);
    DeineHauptKlasse.this.ButtonFine.paintImmediately(0, 0, 500, 600);
    DeineHauptKlasse.this.ButtonSwitchOutput.paintImmediately(0, 0, 500, 600);
    DeineHauptKlasse.this.ButtonMinMax.paintImmediately(0, 0, 500, 600);
    DeineHauptKlasse.this.ButtonGetConfigFile.paintImmediately(0, 0, 500, 600);
    DeineHauptKlasse.this.ButtonGetFiles.paintImmediately(0, 0, 500, 600);
    DeineHauptKlasse.this.ButtonDeleteMeassurement.paintImmediately(0, 0, 500, 600);
    DeineHauptKlasse.this.ButtonFirmware.paintImmediately(0, 0, 500, 600);
    DeineHauptKlasse.this.ButtonGetFtpFile.paintImmediately(0, 0, 500, 600);
    DeineHauptKlasse.this.ButtonGetFtpFile.paintImmediately(0, 0, 500, 600);
    
    try
    {
    Thread.sleep(10000);
    }
    catch (InterruptedException e)
    {
    System.out.println("geht nicht");
    }
    
    DeineHauptKlasse.this.ButtonStandard.setEnabled(true);
    DeineHauptKlasse.this.ButtonFine.setEnabled(true);
    DeineHauptKlasse.this.ButtonSwitchOutput.setEnabled(true);
    DeineHauptKlasse.this.ButtonMinMax.setEnabled(true);
    DeineHauptKlasse.this.ButtonGetConfigFile.setEnabled(true);
    DeineHauptKlasse.this.ButtonGetFiles.setEnabled(true);
    DeineHauptKlasse.this.ButtonDeleteMeassurement.setEnabled(true);
    DeineHauptKlasse.this.ButtonFirmware.setEnabled(true);
    DeineHauptKlasse.this.ButtonGetFtpFile.setEnabled(true);
    DeineHauptKlasse.this.ButtonSetFtpFile.setEnabled(true);
    
    }
    }
    }.start();
    Wenn du Thread.sleep einfach so direkt im ActionListener rufst legst du den gesamten GUI-Thread schlafen. Das musst du einfach nur parallelisieren, dann hauts hin. Ob du das direkt über einen Thread oder über einen Timer machst ist am Ende Jacke wie Hose.

    Übrigens: Klassen-Variablen werden klein geschrieben. Neue Wörter in der Variable beginnen mit einem großbuchstaben (z.B. "buttonForClosingTheApplication").
    Geändert von speedi (12.04.2010 um 17:30 Uhr)

  6. #6
    Moderator Java
    Reg.-Datum
    24.07.2007
    Beiträge
    8.290

    Standard

    Zitat Zitat von speedi Beitrag anzeigen
    Das musst du einfach nur parallelisieren, dann hauts hin. Ob du das direkt über einen Thread oder über einen Timer machst ist am Ende Jacke wie Hose.
    Ich denke das wird nicht so funktionieren, denn wenn der Thread schläft und der Button geklickt wird, dann wird nachdem der Button wieder aktiv ist, die Aktion des Listeners trotzdem ausgeführt. Man unterbindet ja mit einem sleep nicht die Abarbeitung.
    Ich würde einen Thread bevor ein paralleler Thread schläft eine synchronisierte und final Boolvariable entsprechend setzen und diese innerhalb des Button-Listeners abfragen. Zusätzlich wäre es dann auch sinnvoll eine Statusnachricht einzubauen, die dem User mitteilt, dass gerade gearbeitet wird.
    Buttons einfach an- und ausschalten finde ich nicht besonders benutzerfreundlich, ich würde einfach die Aktion des Listeners mit einem Dialog abfangen
    Geändert von flashpixx (14.04.2010 um 10:40 Uhr)
    We can only see a short distance ahead, but we can see plenty there that needs to be done. (Alan Turing)
    http://flashpixx.de

  7. #7
    Reg.-Benutzer Avatar von speedi
    Reg.-Datum
    01.10.2004
    Ort
    Ottobrunn
    Beiträge
    809

    Standard

    Zitat Zitat von flashpixx Beitrag anzeigen
    Ich denke das wird nicht so funktionieren, denn wenn der Thread schläft und der Button geklickt wird, dann wird nachdem der Button wieder aktiv ist, die Aktion des Listeners trotzdem ausgeführt. Man unterbindet ja mit einem sleep nicht die Abarbeitung.
    So wie ich es geschrieben habe würde es funktionieren. Du legst ja nicht die GUI schlafen sondern erstellst einen neuen Thread der zuersteinmal die Buttons abschaltet dann schläft(nur dieser eine Thread schläft! - alle anderen natürlich nicht) und dann die Buttons wieder anschaltet.

    Wenn du auf einen deaktivierten Button klickst werden seine ActionListener natürlich nicht gerufen, aber der klick wird natürlich verarbeitet, da die GUI eben nicht schläft.


    Zitat Zitat von flashpixx Beitrag anzeigen
    Ich würde einen Thread bevor ein paralleler Thread schläft eine synchronisierte und final Boolvariable entsprechend setzen und diese innerhalb des Button-Listeners abfragen. Zusätzlich wäre es dann auch sinnvoll eine Statusnachricht einzubauen, die dem User mitteilt, dass gerade gearbeitet wird.
    Wenn der Grund wieso teile der GUI disabled sind nicht ersichtlich ist wäre das sicher eine sinnvolle Sache. Allerdings darf man dann die Buttons nicht mit setEnabled(boolean b) bearbeiten, da nütlich ausgeschaltete Buttons ihre ActionListener nicht mehr rufen - d.h. man müsste sich was einfallen lassen, damit der User nicht erst beim clicken merkt, dass sein vorhaben nicht möglich ist (z.B. manuelles setzen der Farbe).

  8. #8
    ces
    ces ist offline
    Reg.-Benutzer
    Reg.-Datum
    05.03.2008
    Beiträge
    23

    Standard

    Hi ich habs jetzt anders gemacht. ich hab nen Dialog modal hochgepoppt und nach 10 sekunden dann disposed

    nicht schön aber es funktioniert ...

    danke nochmals für die coolen tipps

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. Antworten: 14
    Letzter Beitrag: 03.04.2009, 20:16
  2. Suche weiterführendes Buch zu Java
    Von The Gunner im Forum Java
    Antworten: 13
    Letzter Beitrag: 06.08.2007, 01:29
  3. Java 1.5.0 unter SuSE als Standard Compiler
    Von Marvil im Forum Linux + Unix
    Antworten: 4
    Letzter Beitrag: 24.11.2004, 18:58
  4. Firebird und Java
    Von Shadow2k im Forum Anwendungssoftware
    Antworten: 2
    Letzter Beitrag: 09.01.2004, 12:20
  5. ohne zusatz software java und java plugins verbieten...
    Von Drakoon im Forum Windows Betriebssysteme
    Antworten: 1
    Letzter Beitrag: 30.04.2002, 20:30