Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    94

    JFrame e JPanel in due classi differenti

    Salve a tutti, ho un problema....ho un frame che simula l'interfaccia di un sito, ho creato un Container c, e settato il Border Layout.
    Quando clicco su un bottone voglio che si visualizzi un jPanel (ossia la lista desideri), ma sul frame stesso...senza far sparire il frame, fare ciò mi risulterebbe semplice se creassi il jPanel come altro componente del Frame (quindi il tutto nella stessa classe).....e
    c.add(pannello, BorderLayout.CENTER) nel costruttore del Frame.

    Invece io voglio creare il jPanel con una nuova classe, tipo:

    codice:
    public class Pannello extends javax.swing.JPanel {
    
         public Pannello() {
            initComponents(); 
        }
                        
        private void initComponents() {
          ........................................    
        }                               
    }
    poi nel bottoneActionPerformed del Frame principale creo un oggetto Pannello, tipo così

    codice:
    private void BottoneActionPerformed(java.awt.event.ActionEvent evt) {                                          
             
    Pannello panel;
    panel= new Pannello();
    panel.setVisible(true);
    
    //qui dovrei vorrei aggiungere la componente al Container, ma non lo vede
    
    c.add(panel, BorderLayout.CENTER);
           
        }
    Evidentemente mi manca qualche nozione di base, tipo che l'aggiunta delle componenti nel Container può essere fatta solo nei costruttori, non so. Oppure c'è un metodo che mi recupera il Container.............qualcuno può aiutarmi

    Il motivo della mia scelta è che la classe del Frame principale è già piena zeppa di codice, pannelli (messi come Altra componente del frame)che abilito e disabilito a seconda dei tasti premuti....volevo rendere il tutto più leggibile separando le classi.

    Grazi milleeee

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Ciao, io ho fatto qualcosa di simile anche se non è esattamente quello che cerchi forse.

    Spesso ho più classi e ho la necessità di chiudere un frame e aprirne un altro o nascondere/mostrare/modificare delle componenti gestite da un'altra classe: per questo di solito definisco il JFrame come variabile statica di una classe, e se ad esempio premo un pulsante (gestito da un'altra classe) faccio qualcosa del tipo:

    codice:
    Container finestra=NomeClasse.frame.getContentPane();
    ((JLabel)((JPanel)finestra.getComponent(0)).getComponent(0)).setText("Seleziona la partita da rivedere (Totale partite: "+n+")");
    Con getComponent puoi richiamare i componenti interni a qualsiasi livello, ma se vuoi farne in successione devi fare il cast del Component a quello che ti aspetti di trovare (ovviamente rischi che si blocchi in esecuzione se non gestisci bene il tutto).

    In questo esempio cambiavo il testo di una label , ho anche dovuto mostrare e nascondere bottoni in questo modo:
    codice:
    if(premuto.equals("Elimina")) // premuto è la getActionCommand() del bottone 
    {
            // in questo caso ho definito statico il pannello pS in un'altra classe
        for(int i=13;i<16;i++)((Box)(Classe.pS.getComponent(0))).getComponent(i).setVisible(false);
        for(int i=0;i<3;i++)((Box)(Classe.pS.getComponent(1))).getComponent(i).setVisible(false);
        for(int i=3;i<8;i++)((Box)(Classe.pS.getComponent(1))).getComponent(i).setVisible(true);        
    }
    Non ho mai però nascosto/mostrato pannelli dopo averli creati, anche perchè dovresti ridefinire la posizione degli altri pannelli se vuoi controllare il tutto...
    Altri metodi per recuperare Componenti sono ad esempio getComponents() che restituisce un array dei componenti di un Container,oppure getParent() che restituisce il Container di un componente qualsiasi.

    Ps: Uso Swing da pochi mesi e molte delle cose scritte potrebbero fare rabbrividire qualche nostro utente più esperto

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    94
    Grazie mille Ansharja, anche io non sono esperta con Swing e sto cercando di imparare da autodidatta . "Studierò" con calma il tuo modo di fare per capire se fa al caso mio

    Grazie ancora

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.