(swing) Dynamically adding/removing Components

  • Ich hab ein JPanel. Es soll abhängig von einer CheckBox sein. Wenn diese Checkbox selektiert ist, wird dieses JPanel einem anderen hinzugefügt. Wenn sie deselektiert wird, wird dieses JPanel wieder entfernt.

    Das Entfernen verursacht Probleme. Wenn ich die CheckBox deselektiere, verschwindet das JPanel nicht. Wenn ich jetzt aber das Parent-Frame, das dieses JPanel enthält ein wenig vergrößere oder verkleinere, dann verschwindet das JPanel doch. Das ist ziemlich nervig. Woran könnte das liegen, bzw. sollte ich irgendwas updaten oder so? Irgendwo hab ich gelesen, dass

    Code
    panel.revalidate();
       panel.repaint();

    dieses Problem beheben soll, aber es stimmt anscheinend nicht ganz.

    The idea behind this technique is surprisingly simple: just go ahead and do whatever you want to without paying attention to what anybody else is doing. If there is a problem, worry about it later. (Many politicians use this algorithm, too) -- A. S. Tanenbaum, M. v. Steen, Distributed Systems

  • hmm, ich glaub, du musst das validate() nicht vom panel aufrufen, sondern vom uebergeordneten container, allerdings habe ich schon seit ewigkeiten nicht mehr java und noch laenger nicht mehr swing programmiert, vielleicht hat sich am api was geaendert, keine ahnung...

    aber ich weisz noch, dass mich dieses problem damals auch aufgehalten hab, ich glaub, ein uebergeordneter_container.validate() behebt es (repaint ist implizit bei validate())

  • Danke vielmals!

    Vom übergeordneten JPanel den Aufruf machen war tatsächlich das Richtige. Hätte mir nicht gedacht, dass es so schnell geht...

    The idea behind this technique is surprisingly simple: just go ahead and do whatever you want to without paying attention to what anybody else is doing. If there is a problem, worry about it later. (Many politicians use this algorithm, too) -- A. S. Tanenbaum, M. v. Steen, Distributed Systems

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!