Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    268

    aggiungere JLabel a un JPanel a runtime

    Ciao, in un JFrame ho un JPanel e un desktopPane e un menu;
    Io vorrei che al click di una voce di menù si apra nel desktopPane un InternalFrame e vengano aggiunte delle label al mio panel.

    codice:
      
    private void regOpeMenuItemActionPerformed(java.awt.event.ActionEvent evt) {                                                     RegistroOperazioni ro = new RegistroOperazioni(); //questo è la mia InternalFrame
          int width, hight;
          width = deskTop.getWidth();
          hight = deskTop.getHeight();
          ro.setSize(width, hight);
          
          deskTop.add(ro);
          JLabel meseCorrente = new JLabel("Mese Corrente");
          
          JLabel trimestre =  new JLabel ("Ultimi 3 Mesi");
          JLabel cerca = new JLabel("Cerca");
          sidePanel.add(meseCorrente);
          sidePanel.add(trimestre);
          sidePanel.add(cerca);
          sidePanel.revalidate();
          sidePanel.repaint();
    
    
           ro.show();
        }
    riesco a visualizzare InternalFrame, ma le JLabel non vengono visualizzate nel JPanel

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da X-mac Visualizza il messaggio
    Ciao, in un JFrame ho un JPanel e un desktopPane e un menu;
    Io vorrei che al click di una voce di menù si apra nel desktopPane un InternalFrame e vengano aggiunte delle label al mio panel.

    codice:
          sidePanel.revalidate();
          sidePanel.repaint();
    In generale la questione è: il "contenitore" (sidePanel nel tuo caso) usa un layout manager (e quale) ... oppure no? (questo non l'hai spiegato).

    Se sidePanel usa un layout manager, in genere basta un sidePanel.validate(); (e questo, perlomeno con i layout manager semplici es. BorderLayout, FlowLayout, GridLayout).
    Se sidePanel non usa un layout manager, va posizionato/dimensionato esplicitamente e poi basta un sidePanel.repaint();
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    268
    Quote Originariamente inviata da andbin Visualizza il messaggio
    In generale la questione è: il "contenitore" (sidePanel nel tuo caso) usa un layout manager (e quale) ... oppure no? (questo non l'hai spiegato).

    Se sidePanel usa un layout manager, in genere basta un sidePanel.validate(); (e questo, perlomeno con i layout manager semplici es. BorderLayout, FlowLayout, GridLayout).
    Se sidePanel non usa un layout manager, va posizionato/dimensionato esplicitamente e poi basta un sidePanel.repaint();
    sidePanel non usa un contenitore. Viene mostrato nel Frame principale della mia applicazione lo scopo sarebbe quello di avere un "pannello" ove mostrare alcune informazioni agli utenti

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da X-mac Visualizza il messaggio
    sidePanel non usa un contenitore.
    Che vuol dire?? Tutti i componenti Swing tecnicamente sono dei "contenitori" (derivano da Container), anche se ovviamente solo alcuni ha senso che contengano altri componenti.
    Se sidePanel è un JPanel, è appropriato per contenere altri componenti e quindi devi sapere e gestire tu il fatto che abbia o meno un layout manager.

    Ripeto la cosa, che vale in generale: se in un contenitore che è già visibile si aggiungono/tolgono componenti, allora se usa un layout manager: di norma basta validate(); se non usa un layout manager (=posizionamento "assoluto"): di norma basta un repaint().
    Tutto qui.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    268
    il leyoutManager è settato a freedesign
    ho provato a mettere solo repaint(), ma non mi mostra niente

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da X-mac Visualizza il messaggio
    il leyoutManager è settato a freedesign
    Hai "disegnato" il resto della tua interfaccia con un editor "visuale"? (NetBeans?). Se sì, è probabile (non uso NetBeans) che "freedesign" stia a significare l'uso del layout manager GroupLayout di Swing, che è parecchio complesso (se così, guarda allora il codice generato ....).
    E in tal caso non solo un layout manager "c'è" ma devi seguire le sue regole, ovvero indicare tutti i constraint (vincoli) necessari per fargli capire come deve stare il componente.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    268
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Hai "disegnato" il resto della tua interfaccia con un editor "visuale"? (NetBeans?). Se sì, è probabile (non uso NetBeans) che "freedesign" stia a significare l'uso del layout manager GroupLayout di Swing, che è parecchio complesso (se così, guarda allora il codice generato ....).
    E in tal caso non solo un layout manager "c'è" ma devi seguire le sue regole, ovvero indicare tutti i constraint (vincoli) necessari per fargli capire come deve stare il componente.
    Si ho usato netbeans per disegnare il JPanel, ma ho risolto (grazie ai tuoi suggerimenti) ti posto il codice :
    codice:
    sidePanel.setLayout(null);
    JLabel meseCorrente = new JLabel("Mese Corrente");      
          JLabel trimestre =  new JLabel ("Ultimi 3 Mesi");
          JLabel cerca = new JLabel("Cerca per Intervallo Date");
          JLabel DataInizio = new JLabel("Data Inizio");
          JLabel DataFine = new JLabel("Data Fine");
          search.setText("Cerca");
          sidePanel.add(meseCorrente);
          sidePanel.add(trimestre);
          sidePanel.add(cerca);
          sidePanel.add(DataIn);
          sidePanel.add(DataFin);
          sidePanel.add(DataInizio);
          sidePanel.add(DataFine);
          sidePanel.add(search);
          
          Insets insets = sidePanel.getInsets();
          Dimension size = meseCorrente.getPreferredSize();
         
          meseCorrente.setBounds(25 + insets.left, 5 + insets.top,
                 size.width, size.height);
          
          size = trimestre.getPreferredSize();
          trimestre.setBounds(25 + insets.left, 30 + insets.top,
                 size.width, size.height);
         size = cerca.getPreferredSize();
         cerca.setBounds(25 + insets.left, 60 + insets.top,
                 size.width, size.height);
         
          size =DataIn.getPreferredSize();
          DataIn.setBounds(25 + insets.left, 90 + insets.top,
                 size.width, size.height);
          
          size = DataInizio.getPreferredSize();
          DataInizio.setBounds(170 + insets.left, 90 + insets.top,
                 size.width, size.height);
          
          size =DataFin.getPreferredSize();
          DataFin.setBounds(25 + insets.left, 130 + insets.top,
                 size.width, size.height);
          size = DataFine.getPreferredSize();
          DataFine.setBounds(170 + insets.left, 130 + insets.top,
                 size.width, size.height);
          
          size = search.getPreferredSize();
          search.setBounds(180 + insets.left, 170 + insets.top,
                 size.width, size.height);
          
          
          sidePanel.validate();

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.