Alles unsichtbar machen

Extremefall

Bekanntes Mitglied
Hallo,
ist es möglich, alle JButtons etc. mit einer Funtion unsichtbar zu machen oder muss man jedes Objekt einzeln mit setVisible(false) setzen? Gibt es eine Möglichkeit, das ganze abzukürzen?
 
Man kann zwar rekursiv durch die Hierarchie laufen, grob so ähnlich wie hier
http://www.java-forum.org/awt-swing-swt/51543-panel-editierbar-editierbar.html#post320841
nur eben setVisible(false) statt setEnabled(false). Aber was auch immer du da vorhast: Es ist mit an Sicherheit grenzende... nein, es ist mit Sicherheit gröbster Unfug :autsch:

Wieso soll es Unfug sein? Es gibt ein Applet mit verschiedenen Elementen. Wenn jetzt z.B. ein Button geklickt wird, sollen alle Elemente verschwinden und bestimmte mit setVisible(true) angezeigt werden. Ist das nicht möglich?
 
Hm. Kannst du mir ein Beispiel für irgendein Programm nennen, wo auf einen Buttonklick hin irgendwelche Components ausgeblendet werden? Es wird zwischen verschiedenen Panels hin- und her geschaltet (siehe CardLayout oder JTabbedPane), oder einzelne Elemente werden ausgegraut (setEnabled(false)) aber wenn Elemente verschwinden und hinzugefügt werden, wirst du vermutlich schon allein wegen des Layouts in Teufels Küche kommen - ganz abgesehen davon, was der Benutzer davon hält...
 
Hallo,

das Ein- und Ausblenden von Elementen kann schon seinen Sinn haben. Z. B. bei einer optionalen eigenen Eingabe von Werten. Ich habe mal sowas in Verbindung mit einer Combobox und dem GroupLayout-Manager (der hat diesbezüglich ein paar nette Eigenschaften, nur mit den automatischen Abständen muß man obacht geben) gemacht. Die Anwender waren begeistert. Natürlich muß das Layout stimmen.

MfG
hansmueller
 
Vielleicht gibt es Fälle, in denen es Sinn machen kann, aber ich kann mir kaum einen Fall vorstellen, in dem man das nicht ganz konventionell (und einfacher) durch ausgrauen lösen könnte.
 
Bis du aber Phantasielos 🙂

Hab dir mal zwei Bilder hochgeladen.
Es ging um die Eingabe von eigenen Werten. Diese Eingabe sollte aber eher eine Ausnahme sein. Der Anwender sollte primär aus den vielen bereits vorhandenen Vorschlägen auswählen.
Der letzte Eintrag in den Comboboxen schaltet jeweils die individuelle Eingabe frei.
Ein einfaches Ausgrauen sähe da bei weitem nicht so gut aus. (Ist jedenfalls meine Meinung.)

MfG
hansmueller
 

Anhänge

  • VorherFrame.PNG
    VorherFrame.PNG
    7,9 KB · Aufrufe: 43
  • NachherFrame.PNG
    NachherFrame.PNG
    11,9 KB · Aufrufe: 52
Ja, wie gesagt, solche Fälle mag es geben, aber es ist doch die Ausnahme. In diesem Fall ist auch das Layout (vermutlich BoxLayout) noch sehr einfach. Vermutlich würde man dafür ein einzelnes "EigenerAbstandhalterConfiguration"-Panel machen, und das dann ganz dediziert ein- und ausblenden, oder das ganze sogar in einen eigenen Dialog packen. Man könnte sagen: Erlaubt ist, was Sinn macht. Aber pauschal auf einem Panel alle Buttons unsichtbar zu machen klingt eben IMHO nicht sinnvoll.
 
Um auf das eigendliche Problem von Extremefall zurückzukommen...

Man könnte doch eine Klasse "SpezialButton" erstellen, diese von der Klasse JButton erben lassen, und dann zwei statische Methoden schreiben, welche die neue Klasse einmal sichtbar und einmal unsichtbar macht (mit setVisible).

Wenn man nun diese statischen Methoden ausführt, müßten alle Buttons, welche aus dieser Klasse erstellt wurden sichtbar bzw. unsichtbar werden, weil die statischen Methoden direkt auf die Klasse wirken und somit auch auf alle Objekte die daraus erstellt wurden. (Ich hoffe da liege ich jetzt nicht falsch.)

MfG
hansmueller

Nachtrag:
Sorry, funktioniert nicht.
Habe ein bischen herumgespielt und bin zu keinem brauchbaren Ergebnis gekommen.
 
Zuletzt bearbeitet:
Hm. Das setVisible müßte ja nach wie vor von allen Instanzen aufgerufen werden.... :bahnhof: Aber mal schauen, was der TO noch so sagt...
 
Genau das ist ja das Problem. Ich will nicht auf allen Instanzen das ganze aufrufen. Kann man eventuell eine Klasse festlegen, wenn man die einzelnen Elemente erzeugt?
Z.B. gehören Buttons dann zur Gruppe Menü und das dann Menü auf setVisible(false) gesetzt wird, sodass man nicht alle einzelnen Instanzen so setzen muss oder gibt es eine Funktion? Denn ich will nicht alle einzelnen Instanzen mit setVisible(false) setzen, da es ziemlich umständlich ist.
 
Ich habe jetzt alle einzelnen Elemente mit setVisibible(false) gesetzt. Da ich es allerdings öfter im Quelltext nutzen wollte, habe ich einfach dafür eine Funktion geschrieben, sodass der Quelltext nicht so voll wird. Das wäre auch eine Möglichkeit, um Platz zu sparen. Danke für die Hilfe.
 

Zurück
Oben