Avatar billede roger Nybegynder
25. maj 2002 - 15:20 Der er 2 kommentarer og
1 løsning

Kopiering af JPanel

Jeg har et JPanel indeholdende nogle komponenter. Dette panel inkl. dens komponenter, vil jeg gerne bruge i en anden gui.

Hvis jeg henter mit panel, og adder det direkte på den nye GUI, virker det fint, meeeen det forsvinder helt fra den anden GUI :-(

Er der en der kan hjælpe med en løsning til dette ?
Avatar billede lbhansen Nybegynder
25. maj 2002 - 19:29 #1
jeg ville nu nok foreslå at du fx laver en metode
private JPanel createPanel(){
  JPanel panel = new JPanel();
  //doStuffWithPanel
  return panel;
}

Så kører du med to separate panels men ens panels, som vel nok er det du ønsker
Avatar billede carstenknudsen Nybegynder
26. maj 2002 - 10:40 #2
Du kan forsøge at benytte nedenstående
metode der forsøger at lave en total
kopi af dit serialiserbare objekt, hvilket
JPanel er. Om det virker afhænger dog af
hvilke komponenter du har tilføjet til
dit panel; hvis nogle af dem ikke er
serialiserbare har du et problem. I så
fald kan du prøve lbhansens forslag, men
så skal du skræddersy en ny løsning hver
gang du laver noget nyt og det bliver
nok lidt ineffektivt.
Metoden kan bruges således:
JPanel panel = ...;
JPanel copyPanel = (JPanel)deepClone(panel);
Her er kildeteksten:
    public static Serializable deepclone( final Serializable o )
    throws IOException, ClassNotFoundException {
    final PipedOutputStream pipeout = new PipedOutputStream();
    PipedInputStream pipein = new PipedInputStream( pipeout );
    Thread writer = new Thread() {
        public void run() {
            ObjectOutputStream out = null;
            try {
            out = new ObjectOutputStream( pipeout );
            out.writeObject( o );
            } // try
            catch( IOException e ) {
            } // catch
            finally {
            try {
                out.close();
            } // try
            catch( Exception e ) {
            } // catch
            } // finally
        } // run
        };
    writer.start();
    ObjectInputStream in = new ObjectInputStream( pipein );
    Serializable a = (Serializable)in.readObject();
    in.close();
    return a;
    } // deepclone
Avatar billede roger Nybegynder
26. maj 2002 - 15:38 #3
Jeg har fundet en anden løsning i mellemtiden, da jeg er lidt presset mht. eksamensprojekt. Men dit svar ser nydeligt ud, kigger på det når jeg får tid :-)

Du får pointene for dit tidsbrug....thx
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