# JFrame refresh



## purzelbaum_m (4. Nov 2005)

Hallo,

mein Problem:    

Ich habe ein JApplet, darin gibt es eine Funktion die viele JButtons macht und darauf ein Thumbnail als Icon darauf legt, klickt man nun den Button an, so erscheint ein neues Fenster mit dem Original Bild:


```
/* Popup Window - original Picture with importants facts */
    public void pictureDetail(ImageIcon icon, Integer i){
        String strDet = new String();
        String status = new String("Fehler");
        Label lDet = new Label("");
        final JToggleButton button = new JToggleButton(icon);
        button.setSelected(true);

        if (save.get(i).equals(false)){
            status = "Verwerfen";
            button.setBorder(BorderFactory.createLineBorder(Color.RED, 5));
        }else{
            status = "Speichern";
            button.setBorder(BorderFactory.createLineBorder(Color.GREEN, 5));
        }
        strDet = "  Bild Nummer: " + (i+1) + "   " + "Dateiname: " + namen.get(i) + "   " + "Status: " + status;
        lDet.setText(strDet);

        JFrame frame = new JFrame("Details");
        Container con = frame.getContentPane();
        con.setLayout(new BorderLayout(10, 10));

        con.add(button, BorderLayout.CENTER);
        con.add(lDet, BorderLayout.SOUTH);

        button.addItemListener(toggle);
        frame.setSize(373,395);
        frame.setVisible(true);
        System.out.println(save.get(i));
}
```

Das wichtige daran ist, ich habe hier ein JFrame, und ein ToggleButton, nun möchte beim klicken des ToggleButton sowohl den Zustand ändern von Speichern auf Verwerfen und umgekehrt, also auch dazu die Farbe des Randes von Rot auf Grün und umgekehrt...

Mein ItemListener sieht so aus:

```
public class ToggleListener implements ItemListener{
    public void itemStateChanged(ItemEvent event){

        boolean foundIt = false;
        int i = -1;
        Object obj = event.getSource();
        JToggleButton button = (JToggleButton)obj;
        ImageIcon icon = (ImageIcon)button.getIcon();
        while (foundIt == false){
            i++;
            if (icon.equals(images.get(i))) {
                foundIt = true;
            } else {

            }
        }

        int state = event.getStateChange();
        String s;
        if (state == ItemEvent.SELECTED) {
            s = "Speichern";
            save.set(i, true);
        } else {
            s = "Verwerfen";
            save.set(i, false);
        }
        showStatus("Status: " + s);
        System.out.println("Status: " + save.get(i) + " BildNr.: " + i);
    }
}
```

direkt in die Funktion pictureDetail konnte ich den ItemListener nicht einbauen, denke, das liegt daran, dass ich ein JFrame habe und kein weiteres JApplet (was auch gut so ist, weil ich ja ansonsten wieder ein weiteres Browser Fenster hätte, oder? :roll: )

Meine Idee wäre, einfach das JFrame mit den neuen Werten zu aktuallisieren, finde dazu aber keine Methode...
Weiß jemand wie das geht, oder kennt wer eine andere bessere Möglichkeit??? :### 

Vielen Dank schon mal.


----------



## André Uhres (4. Nov 2005)

An Stelle der Klasse "public class ToggleListener implements ItemListener{...}" würde ich eine
Klasse "public class ImageFrame extends JFrame implements ItemListener{...}" anlegen.
Darin würde ich alles reinpacken was zum Frame gehört und dieses Frame vom Applet aus erzeugen.

Übrigens: frame.*validate()* sollte aufgerufen werden wenn der Inhalt vom Frame ändert (Komponenten 
hinzugefügt oder entfernt, oder layout verändert) nachdem der Frame sichtbar gemacht wurde.


----------



## purzelbaum_m (17. Nov 2005)

```
public class BigPicture extends JFrame implements ItemListener {
    public void pictureDetail(ImageIcon icon, Integer i) {

        String strDet = new String();
        String status = new String("Fehler");
        Label lDet = new Label("");
        final JToggleButton button = new JToggleButton(icon);
        button.setSelected(true);

        if (state.get(i).equals(false)) {
            status = "Verwerfen";
            button.setBorder(BorderFactory.createLineBorder(Color.RED, 5));
            button.setSelected(false);
        } else {
            status = "Speichern";
            button.setBorder(BorderFactory.createLineBorder(Color.GREEN, 5));
            button.setSelected(true);
        }
        
        strDet = "  Bild Nummer: " + (i + 1) + "   " + "Dateiname: " +
                 namen.get(i) +
                 "   " + "Status: " + status;
        lDet.setText(strDet);

        JFrame frame = new JFrame();
        Container con = frame.getContentPane();
        con.setLayout(new BorderLayout(10, 10));
        con.add(button, BorderLayout.CENTER);
        con.add(lDet, BorderLayout.SOUTH);

        button.addItemListener(this);
        frame.setTitle("Details");
        frame.setSize(373, 395);
        frame.setLocation(450, 350);
        frame.setVisible(true);
        bigFrame[i] = frame;
        System.out.println(state.get(i));
    }

    public void itemStateChanged(ItemEvent event) {
        boolean foundIt = false;
        int i = -1;
        Object obj = event.getSource();
        JToggleButton button = (JToggleButton) obj;
        ImageIcon icon = (ImageIcon) button.getIcon();
        while (foundIt == false) {
            i++;
            if (icon.equals(images.get(i))) {
                foundIt = true;
            } else {

            }
        }

        int actState = event.getStateChange();
        String s;
        if (actState == ItemEvent.SELECTED) {
            s = "Speichern";
            state.set(i, true);
            button.setBorder(BorderFactory.createLineBorder(Color.GREEN, 5));
            button.setSelected(true);
        } else {
            s = "Verwerfen";
            state.set(i, false);
            button.setBorder(BorderFactory.createLineBorder(Color.RED, 5));
            button.setSelected(false);
        }
        String strDet = "  Bild Nummer: " + (i + 1) + "   " + "Dateiname: " +
                 namen.get(i) + "   " + "Status: " + s;
        showStatus("Status: " + s);
        System.out.println("Status: " + state.get(i) + " BildNr.: " + i);
        ((Label)bigFrame[i].getContentPane().getComponent(1)).setText(strDet);
        bigFrame[i].invalidate();
        bigFrame[i].validate();
    }
}
```


----------

