Avatar billede jarret Nybegynder
25. april 2005 - 17:38 Der er 15 kommentarer og
1 løsning

ændre indhold af JPanel?

Jeg skal ved klik på knapper i mit højre JPanel ændre indholdet af mit venstre JPanel. Hvordan gør jeg det bedst.

jeg har prøvet at sætte mit venstrepanel lig et nyt panel ved klik - den gik ikke.

er vi ude i noget synlig ikke eller ikke synlig eller....
Avatar billede arne_v Ekspert
25. april 2005 - 17:51 #1
Man kan godt få det til at virke med at ændre.

Eksempel:

package april;

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

public class Dynamic extends JFrame implements ActionListener {
    private JPanel l;
    private JPanel r;
    private JButton button;
    private int n;

    public Dynamic() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        getContentPane().setLayout(new GridLayout(1, 2));
        l = new JPanel();
        r = new JPanel();
        button = new JButton("Switch");
        button.addActionListener(this);
        l.add(button);
        getContentPane().add(l);
        getContentPane().add(r);
        n = 0;
        pack();
    }

    public void actionPerformed(ActionEvent ev) {
        if (ev.getSource() == button) {
            if(n % 2 == 0) {
                r.add(new JLabel("It works"));
                pack();
                repaint();
            } else {
                r.removeAll();
                pack();
                repaint();
            }
            n++;
        }
    }

    public static void main(String[] args) {
        Dynamic f = new Dynamic();
        f.setVisible(true);
    }
}
Avatar billede jarret Nybegynder
25. april 2005 - 17:52 #2
kigger lige på det
Avatar billede arne_v Ekspert
25. april 2005 - 17:54 #3
Men jeg kan meget bedre lide:

package april;

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

public class DynamicSmart extends JFrame implements ActionListener {
    private JPanel l;
    private JPanel r;
    private JButton button;
    private JLabel lbl;

    public DynamicSmart() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        getContentPane().setLayout(new GridLayout(1, 2));
        l = new JPanel();
        r = new JPanel();
        button = new JButton("Switch");
        button.addActionListener(this);
        l.add(button);
        lbl = new JLabel("It works");
        r.add(lbl);
        getContentPane().add(l);
        getContentPane().add(r);
        pack();
    }

    public void actionPerformed(ActionEvent ev) {
        if (ev.getSource() == button) {
            if(lbl.isVisible()) {
                lbl.setVisible(false);
            } else {
                lbl.setVisible(true);
            }
        }
    }

    public static void main(String[] args) {
        DynamicSmart f = new DynamicSmart();
        f.setVisible(true);
    }
}
Avatar billede jarret Nybegynder
25. april 2005 - 18:04 #4
men er det bedre på en anden måde?
Avatar billede jarret Nybegynder
25. april 2005 - 18:30 #5
Jeg kan ikke få den til at vore skrive det gamle panel...

gider du prøve at kigge i koden:

public class Butikken extends JFrame implements ActionListener{
   
    private JButton logindmedlem, administrator, opretdag;
   
    private JPanel venstre, vtop, vcenter, vbund, hmenu, htop, hcenter, hbund;
   
    public Butikken (){   

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        getContentPane().setLayout(new GridLayout(1, 2));


        venstre = new JPanel();
        hmenu = new JPanel();
        hmenu.setPreferredSize(new Dimension(200, 600));
        venstre.setPreferredSize(new Dimension(600, 600));
       
        getContentPane().add(venstre);
        getContentPane().add(hmenu);
       
        JLabel hb = new JLabel("Højre bund");
        htop= new JPanel();

        JLabel tekstvarenummer = new JLabel("Varenummer");
        JLabel tekstmedlemsnummersalg = new JLabel("Medlemsnummer");
        final JTextField varenummer = new JTextField(4);
        final JTextField medlemsnummersalg = new JTextField(3);
       
   
        htop.add(tekstmedlemsnummersalg);
        htop.add(medlemsnummersalg);
        htop.add(tekstvarenummer);
        htop.add(varenummer);
       
        hcenter= new JPanel();

       
       
        hbund = new JPanel();
       
        logindmedlem = new JButton("Medlem Logind");
        logindmedlem.addActionListener(this);
   
        administrator = new JButton("Administrator");
        administrator.addActionListener(this);
       

        hbund.add(logindmedlem);
        hbund.add(administrator);   

       
        vtop= new JPanel();
   
        vcenter= new JPanel();
        JLabel kassebe = new JLabel("Indtste kasse startbeholdning");
        JLabel medlemsnummer = new JLabel("Medlemsnummer");
        final JTextField star = new JTextField(5);
        final JTextField textmedlemsnummer = new JTextField(3);

        vcenter.add(kassebe);
        vcenter.add(star);
        vcenter.add(medlemsnummer);
        vcenter.add(textmedlemsnummer);
       
        JPanel vbund = new JPanel();
       
        opretdag = new JButton("Opret dag");
        opretdag.addActionListener(this);
       
           
        vbund.add(opretdag);
       
        hmenu.setLayout(new GridLayout(3, 1));       
        venstre.setLayout(new GridLayout(3, 1));
       
        venstre.add(vtop);
        venstre.add(vcenter);
        venstre.add(vbund);
                   
        hmenu.add(htop);
        hmenu.add(hcenter);
        hmenu.add(hbund);
       
        setDefaultLookAndFeelDecorated(true);

        pack();       
       
       
        }

           
        public void actionPerformed(ActionEvent e)
            {
                if(e.getSource() == logindmedlem)
                {
                    MedlemLogin m = new MedlemLogin();
                    m.identificer();
                   
                }
               
                if(e.getSource() == administrator) System.out.println("ad");
               
                if(e.getSource() == opretdag){
                               
                                Kasse d = new Kasse();
                                venstre.removeAll();
                                venstre.add(d.nyKasse());
                                //venstre = d.nyKasse();
                                pack();
                                repaint();
                   
                }

       
       

    }
   
   
}
Avatar billede arne_v Ekspert
25. april 2005 - 18:33 #6
hvilket panel er det du ikka kan overskrive når du gør hvad ?
Avatar billede jarret Nybegynder
25. april 2005 - 18:36 #7
jeg vil gerne ændre panelet venstre eller det vil sige jeg vil gerne have et andet panel der hvor "venstre" er - når der trykkes på "opretdag" ( den nedereste if)
Avatar billede jarret Nybegynder
25. april 2005 - 18:38 #8
metoden "nyKasse" i klassen kasse returnere et JPanel (nederete if)som jeg gerne vil udskifte med "venstre"
Avatar billede arne_v Ekspert
25. april 2005 - 18:56 #9
Skal du så ikke:

...
getContentPane().remove(venstre);
venstre = d.nyKasse();
getContentPane().add(venstre);
...
Avatar billede jarret Nybegynder
25. april 2005 - 19:03 #10
jo det virken næsten.....det nye panel er til højre....
Avatar billede jarret Nybegynder
25. april 2005 - 19:05 #11
det virker når jeg add´er højre delen igen -- super..

mange tak for hjælpen lægger du et svar?
Avatar billede arne_v Ekspert
25. april 2005 - 19:05 #12
svar
Avatar billede arne_v Ekspert
25. april 2005 - 19:06 #13
det er vel nemmere at angive placeringen i gridden i yderligere argumenter til add metoden !?
Avatar billede jarret Nybegynder
25. april 2005 - 19:16 #14
ja det er det nok, vil du give et eksempel på hvordan jeg angiver?
Avatar billede arne_v Ekspert
25. april 2005 - 20:11 #15
du burde kunne:

ditpanel.add(dinkomponent, positionigrid);

men nu kan jeg godt nok ikke lige få det til at virke ????
Avatar billede jarret Nybegynder
25. april 2005 - 21:01 #16
ok jeg prøver - endnu engang tak
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