Avatar billede bumle90 Nybegynder
21. juni 2004 - 16:42 Der er 10 kommentarer og
1 løsning

Opdatere JApplet

Jeg har en JAppelt der består af en række swing-applikationer.
Mit problem er jeg gerne vil dynamisk fjerne og tilføje komponenter. Altså mens appletten kører.
Hvordan gør jeg dette. Husk på det er swing-komponenter der er tilføjet appletten, og ikke ting jeg tegner. Så det er ikke repaint jeg er ude efter.
Hvordan gør jeg det?
MVH. Bumle90
Avatar billede arne_v Ekspert
21. juni 2004 - 16:48 #1
Et eksempel (Swing dog ikke applet) til inspiration:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class DynamicAdd extends JFrame implements ActionListener {
    private JButton button;
    private int n;

    public DynamicAdd() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        getContentPane().setLayout(new GridLayout(10, 10));
        button = new JButton("Add button");
        button.addActionListener(this);
        getContentPane().add(button);
        pack();
        n = 1;
    }

    public void actionPerformed(ActionEvent ev) {
        if (ev.getSource() == button) {
            getContentPane().add(new JLabel("Label " + n));
            pack();
            n++;
        }
    }

    public static void main(String[] args) {
        DynamicAdd f = new DynamicAdd();
        f.show();
    }
}
Avatar billede mikkelbm Nybegynder
21. juni 2004 - 16:50 #2
Hvis du har problemer med at dine komponenter ikke bliver fjernet eller vist, kan du prøve at køre en:


this.validate();

eller:

this.getContentPane().validate();
Avatar billede arne_v Ekspert
21. juni 2004 - 16:50 #3
Stort set tilføjer man bare komponenter
Avatar billede bumle90 Nybegynder
21. juni 2004 - 16:52 #4
men i en applet er det jo anderledes end i en frame.
Der bliver paint jo kaldt osv.
Man kan ihvertfald ikke kalde show eller pack i en applet
Avatar billede mikkelbm Nybegynder
21. juni 2004 - 16:53 #5
Og for at følge lidt op på Arne, kan du for at fjerne komponenter jo køre en:

getContentPane().remove(button);
Avatar billede bumle90 Nybegynder
21. juni 2004 - 16:56 #6
Ja...Det har jeg gjort. Og jeg har også added dem igen.
Men mit problem er at når det er gjort hvad skal man da gøre for at opdatere appletten?
Avatar billede mikkelbm Nybegynder
21. juni 2004 - 16:57 #7
Har du prøvet at køre:

validate();
eller
getContentPane().validate();

???

Efter du har tilføjet eller fjernet dine komponenter?
Avatar billede bumle90 Nybegynder
21. juni 2004 - 17:01 #8
cool validate virker sgoda :p
Læg pts. mikkel :)
Avatar billede _carsten Nybegynder
21. juni 2004 - 17:02 #9
Som du normalt ville gøre det, ved at adde/remove komponent til containeren, det eneste der er vigtigt i den forbindelse er at kalde validate() på den container hvor du tilføjer/fjener en komponent.

Hvis det kun er en del af arealet i den enkelte container som ændres, er det også nødvendigt at kalde repaint()

Grunden til at du i første omgang skal kalde validate(), skyldes at du ændrer på containerens layout, den skal derfor valideres igen.
At repaint() måske også er nødvendig, kan være i tilfælde hvor der måske kun tilføjes en knap som kun fylder en brøkdel af containerens areal, hvilket gør at containeren skal gentegnes.

Arne's løsning kan også bruges, problemet er bare den så at sige genopbygger hele framen hver gang der trykkes på knappen( eller sagt på en mere rigtig måde, så mosler den rundt med alle de komponenter som framen indeholder) - så primært kald validate på den aktuelle container, om nøvendigt - så repaint()
Avatar billede mikkelbm Nybegynder
21. juni 2004 - 17:03 #10
Jeg lægger et svar :)
Avatar billede mikkelbm Nybegynder
21. juni 2004 - 17:05 #11
Men som Carsten skriver - hvis du har et Panel/JPanel du tilføjer/fjerner fra, er det kun nødvendigt at kalde validate på den.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester