# Refresh JPanel



## Apfelkeks (11. Nov 2008)

Hallo!

es ist bestimmt eine simple Sache, aber irgeendwie bekomme ich es nicht hin:

Ich habe einen JDialog und möchte, dass der enthaltenen JPanel neu gezeichnet wird.
Ich habe es versucht mit

```
pane.revalidate();
pane.validate();
pane.updateGraphics(Graphics g);
pane.repaint();
```

Aber nix wird refreshed, was mache ich denn falsch?

Danke schonmal im Voraus..


----------



## SlaterB (11. Nov 2008)

> was mache ich denn falsch? 

keinen (ausreichenden) Quellcode gepostet


----------



## Apfelkeks (11. Nov 2008)

Ähm.... ok sorry ich bin keine geübte Forum-Posterin.
Was könnte denn noch interessant für Euch sein?

Also ich habe einen Browse-Button der mit einem File-Open Dialog verknüpft ist. Wenn ein File ausgewählt wurde, wird der Name des Files in einer Combobox angezeigt. Das Funktioniert auch soweit, nur dass das Textfeld sich nicht refreshed und man es deswegen nicht sehen kann. 

Also:


```
pane.add(browseCombobox);
browseCombobox = updateBrowseComboBox(files);
pane.revalidate();

private JComboBox updateBrowseComboBox(String[] content)
{
 if(content != null)
   return new JComboBox(content);
 else
   return null;
}
```


----------



## Verjigorm (11. Nov 2008)

Du erzeugst eine neue JCombobox und fügst sie dann nicht zum Layout hinzu ...

vertausch mal zeile 1+2

Wobei es halt generell schwachfug ist, die Combobox neu zu erzeugen.
Alte einträge rausnehmen und neue reintun ist vielleicht bissl mehr aufwand, aber es werden nicht dauernd neue Objekte erzeugt

Edit: entfernst du eigentlich dann die alte ComboBox oder fügst du nur fleissig neue hinzu?


----------



## Apfelkeks (11. Nov 2008)

stimmt, ich probier das mal eben aus..


----------



## Apfelkeks (12. Nov 2008)

Also ich hab jetzt folgendes gemacht:


```
panel.add(combobox);
dialog.add(panel);

combobox = new JCombobox("test");
dialog.remove(panel);

panel.add(combobox);
dialog.add(panel);

dialog.repaint();
```


Geht immernoch nicht (


----------



## SlaterB (12. Nov 2008)

vorher hattest du so viele schöne Befehle aufgezählt, nun kein Interesse mehr daran?


```
public class TestGUI
    extends JFrame
{
    private JCombobox combobox = new JCombobox("test1");
    private JPanel panel;
    private JPanel dialog;

    public TestGUI()
        throws Exception
    {
        JButton b = new JButton("action");
        b.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {
                    panel.add(combobox);
                    dialog.add(panel);

                    combobox = new JCombobox("test");
                    dialog.remove(panel);

                    panel.add(combobox);
                    dialog.add(panel);

                    dialog.validate();
                    System.out.println("done");
                }
            });

        dialog = new JPanel();
        panel = new JPanel();


        add(b, BorderLayout.NORTH);
        add(dialog, BorderLayout.CENTER);


        setSize(200, 100);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }

    public static void main(String[] args)
        throws Exception
    {
        new TestGUI();
    }
}


class JCombobox
    extends JComboBox
{
    JCombobox(String st)
    {
        super(new Object[]
            {st});
    }
}
```


----------

