ContentPane leeren und völlig neu bestücken?

Status
Nicht offen für weitere Antworten.

sliwalker

Top Contributor
Hi,

wäre nett wenn mir jemand folgende Frage beantworten könnte:

Nachdem ich auf einen Button geklickt habe, sollen ein paar Berechnungen durchgeführt werden und dann alle Elemente des ContentPane entfernt werden (zb. JTextBox, JComboBox) damit ich andere Dinge (zb. Label usw) einfügen kann, die dem Nutzer Informationen geben.

Ich habe probiert mit
Code:
 cp.removeAll()

alle Komponenten zu entfernen und dann die neuen zu erstellen und einzufügen. Aber es scheint nicht die richtige Methode zu sein, da außer 99% Prozessorlast nichts passiert 😉 Hab auch schon überlegt, ob ich alles was ich bisher direkt auf dem ContentPane platziert habe auf einem JPanel zu plazieren und dann irgendwie nur die Panel aus zu tausschen. Ist das eher der Lösungsweg?
Kann auch sein das ich total auf dem Schlauch stehe und es schonmal gemacht habe, aber da morgen meine Prüfungen sind, habe ich alles vergessen 😛

Wäre nett wenn mir jemand helfen könnte 😉
greetz
SLi
 
Hast du das Panel auch wieder aktualisiert oder nur die Komponenten entfernt? Falls das zutrifft, versuchs ma anschließend mit validate()
 
hm dann machst du wohl irgendwas falsch 😉
sicher dass die 99% prozessorlast nicht von deiner berechnung kommen? generell geht das was du machen willst so:

Code:
Container cp = getContentPane();
cp.removeAll();
cp.add(einPanel);
cp.validate();
cp.repaint();

zeig mal n bisschen code
 
Wow, das ging schnell 🙂
hier ein bisschen Code...

Der Eventhandler:

Code:
        if (ae.getActionCommand().equals(btnText[2]))
        {
             if (!  
                   (
                   (textfields[1].getText().equals("")) && 
                   (textfields[2].getText().equals("")) &&             
                   (comboboxes[1].getSelectedItem().toString().equals("")) &&
                   (comboboxes[2].getSelectedItem().toString().equals(""))
                   )
               )
             {
                 stau = new Stau();
                 stau.setMelder(textfields[0].getText());
                 stau.setVonAbfahrtID(((Abfahrt)comboboxes[1].getSelectedItem()).getI_id());
                 stau.setBisAbfahrtID(((Abfahrt)comboboxes[2].getSelectedItem()).getI_id());
                 stau.setZeit(new Date());
                 stau.setLaenge(Integer.parseInt(textfields[1].getText()));
                 stau.setGrund(textfields[2].getText());
                 
                 if (staus.addStau(stau))
                 {
                    showStaus();
                 }
                 else
                 {
                     JOptionPane.showMessageDialog(this, "nicht geklappt");
                 }
             }
        }

Methode "ShowStaus()":
Code:
    public void showStaus()
    {
        //Vector vec = staus.getStaus();
        
        this.cp.removeAll();
        /*
        JList list = new JList(vec);
        DefaultListModel dlm = new DefaultListModel();
        cp.add(new JScrollPane(list));
         */
        this.invalidate();
    }

EDIT:
So entfernt er alles, aber die JList sieht man nicht.
Code:
    public void showStaus()
    {
        Vector vec = staus.getStaus();
        
        this.cp.removeAll();
        
        JList list = new JList();
        DefaultListModel dlm = new DefaultListModel();
        cp.add(new JScrollPane(list));
         
        this.invalidate();
        this.repaint();
    }

In der Klasse Stau habe ich eine Methode"toString()". Dann sollte in der JList doch was stehen,oder?
 
Sorry,

jetzt klappt es. Hab jetzt validate() anstatt invalidate() benutzt. Aus CPP dachte ich zu wissen, dass invalidate() automatisch validate() aufruft. Aber naja, jetzt geht es.

Lösung:
Code:
    public void showStaus()
    {
        Vector vec = staus.getStaus();
        
        this.cp.removeAll();
        
        JList list = new JList(vec);
        DefaultListModel dlm = new DefaultListModel();
        cp.add(new JScrollPane(list));
         
        this.validate();
        this.repaint();
    }

Danke für den Tipp mit validate() und repaint() 😉

greetz
SLi
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben