Avatar billede gala Nybegynder
02. december 2003 - 18:58 Der er 8 kommentarer og
1 løsning

en metode til at opdatere et JPanels indhold?

Hey!
Jeg har et lille problem med at finde ud af hvordan man opdaterer indholdet af en bestemt JPanel. Det er fordi jeg får åbnet mange mange frames når jeg navigerer rundt i min applikation (lidt ligesom en hjemmeside) - og det skulle jo helst ikke ske.
Skal jeg lukke det gamle vindue på en eller anden måde når jeg bevæger min ind på et nyt? Eller er der en eller anden smart metode så jeg bare kan opdatere Framen? Eller en bestemt JPanel?
Takker!
Gala
Avatar billede _carsten Nybegynder
02. december 2003 - 19:02 #1
Har du prøvet med:    MitPanel.repaint();
Avatar billede soreno Praktikant
02. december 2003 - 19:17 #2
Jeg læser spørgsmålet på en anden måde..

Du ønsker at udskifte komponenterne på dine JPanels ?

Altså f.eks. når man trykker på en knap så ændres indholdet af mitPanel.
Avatar billede gala Nybegynder
02. december 2003 - 19:43 #3
soreno>> ved ikke hvad repaint gør, men jeg tror at du har ret i din læsning. For at sammenligne med en hjemmeside - jeg skal have en menu tilbage i den ene side og "mainframen" skal der udskiftes indhold i.
Avatar billede _carsten Nybegynder
02. december 2003 - 21:03 #4
Måske skulle du studere de forskellige LayoutManager's:
http://java.sun.com/docs/books/tutorial/uiswing/layout/index.html

Du får lige et eksempel på CardLayout, én JFrame og 3 JPanels, måske er det noget du kan bruge - synes selv det rimeligt at gå til.

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

public class TestCardLayout extends JFrame {
   
    public TestCardLayout() {
        initComponents();
        setSize(400,400);
    }
   

    private void initComponents() {
        jPanel1 = new JPanel();
        jLabel1 = new JLabel();
        jPanel2 = new JPanel();
        jPanel3 = new JPanel();
        jPanel4 = new JPanel();
        jPanel5 = new JPanel();
        jMenuBar1 = new JMenuBar();
        jMenu1 = new JMenu();
        jMenuItem1 = new JMenuItem();
        jMenuItem2 = new JMenuItem();
        jMenuItem3 = new JMenuItem();

        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent evt) {
                exitForm(evt);
            }
        });

        jLabel1.setText("I dette panel er en masse knapper og tekstfelter");
        jPanel1.add(jLabel1);

        getContentPane().add(jPanel1, BorderLayout.NORTH);

        jPanel2.setLayout(new CardLayout());

        jPanel3.setBackground(new Color(0, 102, 255));
        jPanel2.add(jPanel3, "card2");

        jPanel4.setBackground(new Color(255, 0, 51));
        jPanel2.add(jPanel4, "card3");

        jPanel5.setBackground(new Color(51, 153, 0));
        jPanel2.add(jPanel5, "card4");

        getContentPane().add(jPanel2, BorderLayout.CENTER);

        jMenu1.setText("Menu");
        jMenuItem1.setText("Vis bl\u00e5t panel");
        jMenuItem1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                action1(evt);
            }
        });

        jMenu1.add(jMenuItem1);

        jMenuItem2.setText("Vis r\u00f8dt panel");
        jMenuItem2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                action2(evt);
            }
        });

        jMenu1.add(jMenuItem2);

        jMenuItem3.setText("Vis gr\u00f8nt panel");
        jMenuItem3.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                action3(evt);
            }
        });

        jMenu1.add(jMenuItem3);

        jMenuBar1.add(jMenu1);

        setJMenuBar(jMenuBar1);

        pack();
    }


    private void action1(ActionEvent evt) {
        CardLayout cl = (CardLayout)jPanel2.getLayout();
        cl.show(jPanel2, "card2");
    }

    private void action2(ActionEvent evt) {
        CardLayout cl = (CardLayout)jPanel2.getLayout();
        cl.show(jPanel2, "card3");
    }

    private void action3(ActionEvent evt) {
        CardLayout cl = (CardLayout)jPanel2.getLayout();
        cl.show(jPanel2, "card4");
    }
   

    private void exitForm(WindowEvent evt) {
        System.exit(0);
    }



    public static void main(String args[]) {
        new TestCardLayout().show();
    }
   

    private JLabel jLabel1;
    private JMenu jMenu1;
    private JMenuBar jMenuBar1;
    private JMenuItem jMenuItem1;
    private JMenuItem jMenuItem2;
    private JMenuItem jMenuItem3;
    private JPanel jPanel1;
    private JPanel jPanel2;
    private JPanel jPanel3;
    private JPanel jPanel4;
    private JPanel jPanel5;   
}
Avatar billede soreno Praktikant
02. december 2003 - 21:05 #5
Jeg har aldrig selv prøvet det, men mon ikke bare du kan lave de JPanels som du får brug for.

Dem du så viser på skærmen er så afhængig af hviken tilstand programmet er i.
Avatar billede trolle Nybegynder
02. december 2003 - 21:28 #6
du kan bruge

JPanel p = new JPanel();
p.revalidate();

hvilket revalidere indholdet og størrelsen på din JPanel... (evt skifter nogle indre paneler ud osv...)
Avatar billede trolle Nybegynder
02. december 2003 - 21:33 #7
Foreksempel:

JFrame frame;
JPanel main;
JPanel panel1;
Jpanel panel2;

Hvis du saa addere main som centrum til din JFrame:
frame.setLayout(new BorderLayout();
frame.add("Center",main);

saa kan du addere ting til dit indre panel...
main.add(panel1);

og saette et nyt ind, ved at fjerne det gamle og revalidere:
main.remove(panel1);
main.add(panel2);
main.revalidate();

Hvis du saa vil have et nyt panel i mitten  JPanel panel2
skal du:
frame.remove()
Avatar billede trolle Nybegynder
02. december 2003 - 21:34 #8
hmm  ignorer venligst de sidste 3 linjer af sidste kommentar
Avatar billede gala Nybegynder
17. december 2003 - 11:26 #9
kan ikke rigtig få det til at virke. FOrsøger at bruge revalidate, men skal have fat i paneler fra forskellige klasser. Og den siger at den ikke kan få fat i revalidate(). Swing ER importeret...
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