Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    3

    Problema CardLayout e JButton

    Salve a tutti! Intanto.. fantastico forum! In questi mesi non so che avrei fatto senza le conoscenza racchiuse qui dentro! Ho deciso di aprire la discussione perché sono quattro giorni che cerco di risolvere senza successo un problema riguardante le GUI. Io ho studiato java a livello universitario ( quindi non granchč ..) e ho sempre fatto tutto da terminale. Il mio progetto attuale riguarda un software di supporto per un gioco di ruolo, perō volevo farlo con l'interfaccia grafica. Mi sono scaricato WindowBuilder e ci ho studiato un po'

    Il problema č questo:

    ho scritto un Jframe, una windowApp, un panel "contenitore" con il layout a carte e altri due JPanel.
    Negli ultimi due JPanel ho messo dei bottoni per muovermi fra i panel, ma giuro su tutti i programmatori del mondo che non capisco cosa scrivere nei listener dei bottoni per scambiare i pannelli nel frame.

    č un po' lungo ma allego il codice.
    Frame:
    codice:
    public class ASMainFrame extends JFrame {
    
        //COSTRUTTORE
        
        public ASMainFrame() {
            setFont(new Font("Microsoft Sans Serif", Font.PLAIN, 12));
            
            setForeground(Color.DARK_GRAY);
            setTitle("AD SIDERA v1.0");
            setBackground(Color.DARK_GRAY);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setBounds(100, 100, 726, 479);    
        }
        
    }
    Primo JPanel:
    codice:
    public class PannelloContenitore extends JPanel {
    
    public PannelloContenitore() {
            
            setBackground(new Color(34, 139, 34));
            setBorder(new LineBorder(new Color(0, 0, 0), 2));
            setLayout(new CardLayout(0, 0));
            PannelloPrincipale pannelloPrincipale = new PannelloPrincipale();
            PannelloPropositoApp pannelloPropositoApp = new PannelloPropositoApp();
            add(pannelloPrincipale, "nome principale");
            add(pannelloPropositoApp, "name PropositoApp");    
    
    
        }
    
    
    }
    Primo dei JPanel / carta:
    codice:
    public class PannelloPrincipale extends JPanel {
    
    //Costruttore
    
        public PannelloPrincipale() {
            
            setBackground(Color.DARK_GRAY);
            setBorder(new EmptyBorder(0, 0, 0, 0));
            
            
            JLabel titoloPrincipale = new JLabel("AD SIDERA");
            titoloPrincipale.setFont(new Font("mono 07_65", Font.BOLD, 70));
            titoloPrincipale.setForeground(new Color(34, 139, 34));
            titoloPrincipale.setHorizontalAlignment(SwingConstants.CENTER);
            
            JSeparator separatorePrincipale = new JSeparator();
            separatorePrincipale.setForeground(new Color(34, 139, 34));
            separatorePrincipale.setBackground(new Color(34, 139, 34));
            
            JLabel etichettaMenuPrincipale = new JLabel("MENU' PRINCIPALE");
            etichettaMenuPrincipale.setForeground(new Color(34, 139, 34));
            etichettaMenuPrincipale.setFont(new Font("Microsoft Sans Serif", Font.BOLD, 14));
            
            JButton bottAppPrincipale = new JButton("A proposito dell'App");
            
            
            bottAppPrincipale.setHorizontalAlignment(SwingConstants.LEFT);
            bottAppPrincipale.setBackground(Color.DARK_GRAY);
            bottAppPrincipale.setForeground(new Color(34, 139, 34));
            bottAppPrincipale.setFont(new Font("Microsoft Sans Serif", Font.PLAIN, 13));
             
            GroupLayout gl_pannelloPrincipale = new GroupLayout(this);
            gl_pannelloPrincipale.setHorizontalGroup(
                gl_pannelloPrincipale.createParallelGroup(Alignment.LEADING)
                    .addComponent(titoloPrincipale, GroupLayout.DEFAULT_SIZE, 695, Short.MAX_VALUE)
                    .addGroup(gl_pannelloPrincipale.createSequentialGroup()
                        .addGap(10)
                        .addComponent(separatorePrincipale, GroupLayout.DEFAULT_SIZE, 675, Short.MAX_VALUE)
                        .addContainerGap())
                    .addGroup(gl_pannelloPrincipale.createSequentialGroup()
                        .addGap(98)
                        .addGroup(gl_pannelloPrincipale.createParallelGroup(Alignment.LEADING, false)
                             
                            .addComponent(etichettaMenuPrincipale)
                             
                             
                            .addComponent(bottAppPrincipale, GroupLayout.DEFAULT_SIZE, 190, Short.MAX_VALUE)
                        .addContainerGap(96, Short.MAX_VALUE))
            );
            gl_pannelloPrincipale.setVerticalGroup(
                gl_pannelloPrincipale.createParallelGroup(Alignment.LEADING)
                    .addGroup(gl_pannelloPrincipale.createSequentialGroup()
                        .addComponent(titoloPrincipale, GroupLayout.PREFERRED_SIZE, 148, GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(ComponentPlacement.UNRELATED)
                        .addComponent(separatorePrincipale, GroupLayout.PREFERRED_SIZE, 9, GroupLayout.PREFERRED_SIZE)
                        .addGroup(gl_pannelloPrincipale.createParallelGroup(Alignment.LEADING, false)
                            .addGroup(gl_pannelloPrincipale.createSequentialGroup()
                                .addGap(32)
                                .addComponent(etichettaMenuPrincipale)
                                .addGap(30)
                                .addComponent(bottAppPrincipale)
                                .addPreferredGap(ComponentPlacement.RELATED)
                                 .addContainerGap())
            );
            setLayout(gl_pannelloPrincipale);
    
    
            // I LISTENER DEI BOTTONI
            
            bottAppPrincipale.addMouseListener(new MouseAdapter() {
                @Override
                public void mouseClicked(MouseEvent e) {
                
            
                }
            });
            
        }
    
    
    }
    Secondo JPanel / carta:
    codice:
    public class PannelloPropositoApp extends JPanel {
    
    //COSTRUTTORE
    
        public PannelloPropositoApp() {
    
    
    setBackground(Color.DARK_GRAY);
            
            
            JLabel titoloPropositoApp = new JLabel("A proposito dell'App");
            titoloPropositoApp.setHorizontalAlignment(SwingConstants.CENTER);
            titoloPropositoApp.setFont(new Font("Microsoft Sans Serif", Font.BOLD, 20));
            titoloPropositoApp.setForeground(new Color(34, 139, 34));
            
            JSeparator separatorePropositoApp = new JSeparator();
            separatorePropositoApp.setForeground(new Color(34, 139, 34));
            separatorePropositoApp.setBackground(new Color(34, 139, 34));
            
            JTextPane testoPropositoApp = new JTextPane();
            testoPropositoApp.setForeground(new Color(34, 139, 34));
            testoPropositoApp.setBackground(Color.DARK_GRAY);
            testoPropositoApp.setBorder(new LineBorder(new Color(0, 0, 0), 2));
            testoPropositoApp.setEditable(false);
            testoPropositoApp.setText("Prova");
            
            JButton bottMenųPropositoApp = new JButton("Torna al men\u00F9 principale");
            bottMenųPropositoApp.setHorizontalAlignment(SwingConstants.LEFT);
            bottMenųPropositoApp.setForeground(new Color(34, 139, 34));
            bottMenųPropositoApp.setBackground(Color.DARK_GRAY);
            bottMenųPropositoApp.setFont(new Font("Microsoft Sans Serif", Font.PLAIN, 13));
            GroupLayout gl_pannelloPropositoApp = new GroupLayout(this);
            gl_pannelloPropositoApp.setHorizontalGroup(
                gl_pannelloPropositoApp.createParallelGroup(Alignment.LEADING)
                    .addGroup(gl_pannelloPropositoApp.createSequentialGroup()
                        .addContainerGap()
                        .addGroup(gl_pannelloPropositoApp.createParallelGroup(Alignment.LEADING)
                            .addComponent(separatorePropositoApp, GroupLayout.PREFERRED_SIZE, 430, Short.MAX_VALUE)
                            .addComponent(titoloPropositoApp, GroupLayout.PREFERRED_SIZE, 216, GroupLayout.PREFERRED_SIZE)
                            .addComponent(bottMenųPropositoApp)
                            .addComponent(testoPropositoApp, GroupLayout.DEFAULT_SIZE, 568, Short.MAX_VALUE))
                        .addContainerGap())
            );
            gl_pannelloPropositoApp.setVerticalGroup(
                gl_pannelloPropositoApp.createParallelGroup(Alignment.LEADING)
                    .addGroup(gl_pannelloPropositoApp.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(titoloPropositoApp, GroupLayout.PREFERRED_SIZE, 50, GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(ComponentPlacement.RELATED)
                        .addComponent(separatorePropositoApp, GroupLayout.PREFERRED_SIZE, 2, GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(ComponentPlacement.RELATED)
                        .addComponent(testoPropositoApp, GroupLayout.DEFAULT_SIZE, 299, Short.MAX_VALUE)
                        .addGap(18)
                        .addComponent(bottMenųPropositoApp)
                        .addGap(22))
            );
                setLayout(gl_pannelloPropositoApp);
            
        }
    
    
    }
    Ho provato nei listener a fare una cosa del genere (nel codice qui sopra sono vuoti)

    codice:
    CardLayout cl = (CardLayout)(cards.getLayout());
        cl.show(cards, "nome");
    ma non funziona una ciospa. Ho provato anche ad utilizzare un altro layout e scambiare i panel con getContentPane() e facendo repaint() e validate() ma niente. In pratica devo riuscire, cliccando il bottAppPrincipale a scambiare il pannelloPrincipale con il pannelloPropositoApp..

    Nell' applicazione window richiamo il frame con questo:


    ASMainFrame frame = new ASMainFrame();
    PannelloContenitore nuovoContenitore = new PannelloContenitore();
    frame.setContentPane(nuovoContenitore);


    Che fare?

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    3
    Risolto

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.