Enable von Fenster

ulki

Erfahrenes Mitglied
Hi,

ich versuche zu verhindern, das der Nutzer meines Programms während eines zeitaufwändigen Ladevorgangs einen weiteren startet, ohne vorher den begonnenen zu beenden.

Ich habe mich schon etwas umgesehen und mehrere Möglichkeiten gefunden:

- JFrame.setFocusable(false)
- JFrame.setEnabled(false) //scheint nicht zu funktionieren
- eine GlassPane
- ein Progress Monitor

ich meine mich zu erinnern, das es eine ganz leichte Methode gab zu verhindern, das der Nutzer etwas anklickt. Aber ich komme einfach nicht drauf.
Ich hab schon überlegt ob ich einfach alle Komponenten auf Enabled=false setze. Aber es muss doch eine schönere Variante geben!

Ich bin am verzweifeln
Bitte, bitte helft mir!
 
Du könntest das Ganze aber auch unkomplizierter machen:

Code:
//...
private boolean bAction;
 
public void actionPerformed(ActionEvent ae) {
  if (!bAction) {
	bAction = true;
	//zeitaufwendiges Laden
	bAction = false;
  }
}
 
Du meinst also bei jeder Action abfragen ob ich gerade lade? Ich denke generell ist das eine gute Idee. Ich bin mir nur nicht sicher, ob ich das bei mir umsetzen kann, weil Actionhandler auch von anderen Actionhandlern aufgerufen werden und es dann Probleme geben wird.

Aber ich werde mal schauen, ob sich deine Idee umsetzen läßt.

Danke schonmal
 
Meine Faulheit. Ich habe um Code zu sparen das Laden jeder Tabelle nur einmal aufgeschrieben, brauche es aber an mehr als einer Stelle und ab und zu werden auch mehrere Tabellen geladen und nicht nur eine.
Es würde wesentlich mehr Aufwand bedeuten jedesmal alles nocheinmal zu schreiben.


So habe es jetzt ausprobiert nur ein paar Aufrufe verschoben und die Variable eingefügt und jetzt klappt's.

Danke schnuffie

Da nochmal Probleme aufgetaucht sind habe ich noch eine andere Variante versucht, die ich woanders gefunden habe:

Code:
private void setWindowDisabled()
    {
      java.awt.Component c;  
      for (int i = 0;i<center.getComponentCount();i++) {
            c = center.getComponent(i);
            c.setEnabled(false);            //center ist das Panel auf dem alles liegt
        } 
        this.center.setEnabled(false);
    }

und

Code:
private void setWindowEnabled()
    {
      java.awt.Component c;  
      for (int i = 0;i<center.getComponentCount();i++) {
            c = center.getComponent(i);
            c.setEnabled(true);
        } 
        this.center.setEnabled(true);
    }

das funktioniert gut und fehlerfrei. Nur falls jemanden das gleiche Problem quält.

ulki
 
Zuletzt bearbeitet:
Zurück