Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di JAEP
    Registrato dal
    Jan 2004
    residenza
    Treviso
    Messaggi
    421

    Aggiungere dinamicamente controlli

    Salve,
    ho necessità di aggiungere dinamicamente dei controlli all'interno di un oggetto JDialog

    In pratica la finestra JDialog contiene una JList e al suo fianco c'è un panel (chiamato panWords).
    Quando si clicca sulla JList

    codice:
        panWords.removeAll();
        JPanel pane = new JPanel();
        
        int righe = ontClasses[lstClassi.getSelectedIndex()].getNumberWord();
        Word parole[] = ontClasses[lstClassi.getSelectedIndex()].getWord();
        
        JLabel lblWords[] = new JLabel[righe];
        JComboBox cmbType[] = new JComboBox[righe];
        
        GridLayout gruppi = new GridLayout(righe, 2);
        pane.setLayout(gruppi);
        
        
        for (int i=0; i<righe; i++) {
                lblWords[i] = new JLabel(parole[i].getName());
                cmbType[i] = new JComboBox();
                pane.add(lblWords[i]);
                pane.add(cmbType[i]);
        }
    
            panWords.add(pane);
    Il problema è che non visualizzo un tubo! MA se faccio il debug gli oggetti vengono creati correttamente.
    Come ambiente di sviluppo uso NetBeans
    Tutte le leggi umane, non quelle divine, sono il risultato di uno sforzo di uomini. Altri uomini vengono, modificano, aboliscono, perfezionano. Non ci vuole nulla ad abolire. Distruggere è facile, ma ricostruire è difficile.

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Aggiungere dinamicamente controlli

    Originariamente inviato da JAEP
    Il problema è che non visualizzo un tubo! MA se faccio il debug gli oggetti vengono creati correttamente.
    Questione già discussa un sacco di volte. Quando si modifica un "contenitore" (es. aggiungendo/togliendo componenti) dopo che il contenitore è già visibile, se il contenitore usa un layout manager, il layout va validato nuovamente.

    Nel tuo caso il "contenitore" che modifichi (e che presumo sia già visibile) è 'panWords'. Che layout manager usa 'panWords'??? Se uno di quelli "semplici" (non GridBagLayout), metti alla fine:

    panWords.validate();
    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 L'avatar di JAEP
    Registrato dal
    Jan 2004
    residenza
    Treviso
    Messaggi
    421
    Ciao,
    ho provato a mettere panWords.validate() ma non cambia nulla. L'interfaccia mi viene generata da NetBeans in automatico. Ti posto la parte di codice che mi crea i pannelli

    codice:
    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
            getContentPane().setLayout(layout);
            layout.setHorizontalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(layout.createSequentialGroup()
                            .addContainerGap()
                            .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 224, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addGap(28, 28, 28)
                            .addComponent(panWords, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                        .addGroup(layout.createSequentialGroup()
                            .addGap(311, 311, 311)
                            .addComponent(btnChiudi)))
                    .addContainerGap())
            );
            layout.setVerticalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addGap(22, 22, 22)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                        .addComponent(panWords, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 270, Short.MAX_VALUE))
                    .addGap(51, 51, 51)
                    .addComponent(btnChiudi)
                    .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
            );
    
            pack();
    Tutte le leggi umane, non quelle divine, sono il risultato di uno sforzo di uomini. Altri uomini vengono, modificano, aboliscono, perfezionano. Non ci vuole nulla ad abolire. Distruggere è facile, ma ricostruire è difficile.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da JAEP
    ho provato a mettere panWords.validate() ma non cambia nulla. L'interfaccia mi viene generata da NetBeans in automatico.
    Oh noooo... il solito codice insulso, patetico e penoso generato da un IDE ........

    Comunque GroupLayout è un layout manager molto "avanzato" e complesso. Quando si aggiunge un componente vanno specificati dei "constraint" (vincoli).

    E comunque dal codice postato si evince che non è panWords ad avere il GroupLayout .... panWords viene inserito nel GroupLayout.

    .addComponent(panWords, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
    Quindi il dubbio rimane .... quale layout manager usa panWords???
    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 L'avatar di JAEP
    Registrato dal
    Jan 2004
    residenza
    Treviso
    Messaggi
    421
    per panWords non definisco alcun layout manager. Pensavo semplicemente di metterci dentro un normale JPanel definito con un gridLayout.
    Non so come fare
    Tutte le leggi umane, non quelle divine, sono il risultato di uno sforzo di uomini. Altri uomini vengono, modificano, aboliscono, perfezionano. Non ci vuole nulla ad abolire. Distruggere è facile, ma ricostruire è difficile.

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da JAEP
    per panWords non definisco alcun layout manager.
    Se non c'è un layout manager, allora usa repaint() sul contenitore, non validate().

    E ovviamente (ma mi sembra scontato) il componente da aggiungere va posizionato/dimensionato esplicitamente.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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 © 2026 vBulletin Solutions, Inc. All rights reserved.