Avatar billede thesun Nybegynder
08. maj 2004 - 11:03 Der er 8 kommentarer og
1 løsning

Mulstil mine jpanels

Jeg har en del jpanels placeret i et cardlayout, det virker også fint, men hvis jeg nu i mit program har været inde og "bladre" frem til eks. card4, og så forlader dette ved at bevæge mig hen i et andet afsnit i min grafiske brugergranseflade. så nulstiller mit cardlayout ikke hvis jeg senere kommer tilbage igen, det står stadigvæk og viser card4. Er der en løsning på dette så den altid vil vise første card når man aktivere cardlayoutet??

Skal lige siges at dette kun sker når jeg er inde og bevæge mig rundt i min grafiske brugergranseflade. når programmet lukkes ned, og startes op igen, er der ingen problemer.
Avatar billede thundergod Nybegynder
08. maj 2004 - 11:13 #1
1. Når du henviser 'kontrollen' over GUI til dit cardlayout, kalder du samtidig (din egen) nulstillermetode, f.eks. goDefault() e.l.
2. Du kan lave en "lyttertråd" der hver 'n'.sekund kontrollerer om dit cardlayout er synligt. Går ud fra at der er adgang til en metode isVisible()
Avatar billede _carsten Nybegynder
08. maj 2004 - 11:41 #2
Du adder en ComponentListener og agerer udfra en af dens 4 metoder

        cardLayoutPanel.addComponentListener(new java.awt.event.ComponentAdapter() {
            public void componentResized(java.awt.event.ComponentEvent evt) {
                //  mitCardLayout.first( cardLayoutPanel};
            public void componentShown(java.awt.event.ComponentEvent evt) {
                //  mitCardLayout.first( cardLayoutPanel};
            }
            public void componentResized(java.awt.event.ComponentEvent evt) {
                //  mitCardLayout.first( cardLayoutPanel};
            }
            public void componentHidden(java.awt.event.ComponentEvent evt) {
                //  mitCardLayout.first( cardLayoutPanel};
            }
        });

eller adder en FocusListener og bruger mitCardLayout.first( cardLayoutPanel};

eller en windowListener og bruger mitCardLayout.first( cardLayoutPanel};
Avatar billede thesun Nybegynder
08. maj 2004 - 17:06 #3
til _carsten Skal denne metode sættes på det panel der holder mit cardlayout, eller det første card i samme?

jpanel cardholder oprettet med cardlayout
card1
card2
osv....
Avatar billede _carsten Nybegynder
08. maj 2004 - 17:20 #4
Det afhænger lidt af hvad der skal ske og hvornår

Eksempel:
Hvis første kort skal vises når vinduet bliver aktivt, skal du adde en WindowAdapter til din Frame og i metoden windowActivated(WindowEvent e) afvikler du så følgende kode

CardLayout cl = (CardLayout)cardholder.getLayout();
cl.first( cardholder );

Så vil den altid vise første kort når dette vindue bliver aktivt, selvom der eventuelt skiftes mellem åbne vinduer.

Udfra din kommentar, må det blive:  Den skal sættes på panelet
Avatar billede thesun Nybegynder
08. maj 2004 - 20:05 #5
Hmm...kan ikke få det til at virke, har du mulighed for at vise det på nedestående kode eks.

/*
* Eks1.java
*
* Created on 8. maj 2004, 20:00
*/

/**
*
* @author 
*/
public class Eks1 extends javax.swing.JFrame {
   
    /** Creates new form Eks1 */
    public Eks1() {
        initComponents();
    }
   
    /** This method is called from within the constructor to
    * initialize the form.
    * WARNING: Do NOT modify this code. The content of this method is
    * always regenerated by the Form Editor.
    */
    private void initComponents() {
        myCards = new javax.swing.JPanel();

        card1 = new javax.swing.JPanel();
        card2 = new javax.swing.JPanel();
        card3 = new javax.swing.JPanel();
        card4 = new javax.swing.JPanel();

        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                exitForm(evt);
            }
        });

        myCards.setLayout(new java.awt.CardLayout());

        card1.setBorder(new javax.swing.border.TitledBorder(null, "Card1", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("MS Sans Serif", 0, 11), new java.awt.Color(102, 102, 102)));
        card1.setMinimumSize(new java.awt.Dimension(1, 1));
        card1.setPreferredSize(new java.awt.Dimension(100, 100));
        myCards.add(card1, "1");

        card2.setBorder(new javax.swing.border.TitledBorder(null, "Card2", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("MS Sans Serif", 0, 11), new java.awt.Color(102, 102, 102)));
        card2.setMinimumSize(new java.awt.Dimension(1, 1));
        card2.setPreferredSize(new java.awt.Dimension(100, 100));
        myCards.add(card2, "2");

        card3.setBorder(new javax.swing.border.TitledBorder(null, "Card3", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("MS Sans Serif", 0, 11), new java.awt.Color(102, 102, 102)));
        card3.setMinimumSize(new java.awt.Dimension(1, 1));
        card3.setPreferredSize(new java.awt.Dimension(100, 100));
        myCards.add(card3, "3");

        card4.setBorder(new javax.swing.border.TitledBorder(null, "Card4", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("MS Sans Serif", 0, 11), new java.awt.Color(102, 102, 102)));
        card4.setMinimumSize(new java.awt.Dimension(1, 1));
        card4.setPreferredSize(new java.awt.Dimension(100, 100));
        myCards.add(card4, "card3");

        getContentPane().add(myCards, java.awt.BorderLayout.CENTER);

        pack();
    }
   
    /** Exit the Application */
    private void exitForm(java.awt.event.WindowEvent evt) {
        System.exit(0);
    }
   
    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        new Eks1().show();
    }
   
    // Variables declaration - do not modify
    private javax.swing.JPanel card1;
    private javax.swing.JPanel card2;
    private javax.swing.JPanel card3;
    private javax.swing.JPanel card4;
    private javax.swing.JPanel myCards;
    // End of variables declaration
   
}
Avatar billede _carsten Nybegynder
08. maj 2004 - 23:47 #6
Jeg er nok ikke helt med, da dit eksempel altid vil vise card1 når vinduet aktiveres

Men hvis du tilføjer nedenstående kode til dit eksempel kan du se det, prøv at have 2 applikationer kørende (måske notepad - så du kan se dem begge) klik på notepad, så kan du se at Eks1 skifter til card2, når du igen klikker på Eks1 vil den skifte til card1

        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                exitForm(evt);
            }
            public void windowActivated(java.awt.event.WindowEvent evt) {
                CardLayout cl = (CardLayout)myCards.getLayout();
                cl.first( myCards );
            }
            public void windowDeactivated(java.awt.event.WindowEvent evt) {
                CardLayout cl = (CardLayout)myCards.getLayout();
                cl.next(myCards);
            }
        });
Avatar billede _carsten Nybegynder
10. maj 2004 - 19:19 #7
Hvordan ser det ud ????
Avatar billede thesun Nybegynder
10. maj 2004 - 22:37 #8
Hej _carsten, har fået det til at virke nu her, takker for hjælpen. Hvis du lige vil smide et svar så du kan få points.
Avatar billede _carsten Nybegynder
10. maj 2004 - 22:47 #9
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