Avatar billede hesus Nybegynder
14. juni 2007 - 15:40 Der er 3 kommentarer og
1 løsning

cardLayout og GUI programmering

Jeg har en hovedkomponent som viser størstedelen af en GUI. I gui'en er der et område som skal vise en række forskellige paneler afhængig af hvilket state programmet befinder sig i.

De paneler som skal vises i feltet er defineret i seperate klasser. Jeg bruger et cardLayout som er defineret i selve GUI klassen. I hvert panel er der nogle knapper som styrer hvilket panel der skal vises.

Hvordan gør jeg dette bedst?

Lige nu har jeg implementeret det sådan at jeg sender panelet med CardLayoutet med som argument og kan derved skifte inde i de forskellige klasse hvilket panel som skal være vist.
Jeg har bare det problem at når jeg så viser et andet panel fra cardLayoutet er de forskellige variabler ikke vist.

En anden ting er at jeg ønsker at få opdateret hele GUI'en når der trykkes på nogle af knapperne i de seperate klasser. Kan dette gøres uden at sende hele GUI'en med som argument?
Avatar billede mikkelbm Nybegynder
14. juni 2007 - 22:39 #1
Er det hvert enkelt panel der har ansvaret for at placere sig selv? Jeg vil mene ansvaret skal placeres hos det panel hvor du har dine knapper.

Men jeg er ikke helt sikker på, at jeg forstår hvad det er du gerne vil.
Avatar billede _carsten Nybegynder
15. juni 2007 - 22:40 #2
Jeg er heller ikke helt med, så du får et eksempel som måske hjælper dig videre

import java.awt.CardLayout;
import java.awt.Color;
import javax.swing.JPanel;


public class MyFrame extends javax.swing.JFrame {
   
    public MyFrame() {
       
        initComponents();
        layout = new java.awt.CardLayout();
       
        red = new MyPanel(Color.RED);
        green = new MyPanel(Color.GREEN);
        blue = new MyPanel(Color.BLUE);
       
        getContentPane().setLayout(layout);
        getContentPane().add(red, "card_1");
        getContentPane().add(green, "card_2");
        getContentPane().add(blue, "card_3");
        setSize(400,400);
    }
   
                     
    private void initComponents() {
        jMenuBar1 = new javax.swing.JMenuBar();
        jMenu1 = new javax.swing.JMenu();
        jMenuItem1 = new javax.swing.JMenuItem();
        jMenuItem2 = new javax.swing.JMenuItem();
        jMenuItem3 = new javax.swing.JMenuItem();


        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        jMenu1.setText("Skift panel");
        jMenuItem1.setText("Vis r\u00f8dt panel");
        jMenuItem1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                layout.show(getContentPane(), "card_1");
            }
        });

        jMenu1.add(jMenuItem1);

        jMenuItem2.setText("Vis gr\u00f8nt panel");
        jMenuItem2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                layout.show(getContentPane(), "card_2");
            }
        });

        jMenu1.add(jMenuItem2);

        jMenuItem3.setText("Vis bl\u00e5t panel");
        jMenuItem3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                layout.show(getContentPane(), "card_3");
            }
        });

        jMenu1.add(jMenuItem3);

        jMenuBar1.add(jMenu1);

        setJMenuBar(jMenuBar1);

    }                     

                         
   
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new MyFrame().setVisible(true);
            }
        });
    }
   
               
    private javax.swing.JMenu jMenu1;
    private javax.swing.JMenuBar jMenuBar1;
    private javax.swing.JMenuItem jMenuItem1;
    private javax.swing.JMenuItem jMenuItem2;
    private javax.swing.JMenuItem jMenuItem3;
    private CardLayout layout;
    private JPanel red, green, blue;
}








import java.awt.Color;
import javax.swing.JPanel;


public class MyPanel extends JPanel{
    public MyPanel(Color color) {
        setBackground(color);
    }
}
Avatar billede hesus Nybegynder
21. august 2007 - 20:20 #3
Har fixet det... opret som svar så kommer pointene! :)
Avatar billede _carsten Nybegynder
21. august 2007 - 20:39 #4
Jeg er stadig ikke helt med, men jeg kan da sagtens lægge et svar. :)
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