Ciao ragazzi,

ho iniziato da poco a lavorare con le java swing: mi sto appoggiando a netbeans, perchè quel che mi interessa in questo momento è la logica dell'applicazione, il fatto di dover fare l'interfaccia grafica al momento è solo una complicazione, purtroppo necessaria.

Le mie necessità però superano (credo) il supporto che net beans mi può dare, perciò eccomi qui a chiedervi un aiutino.

Devo fare un'interfaccia abbastanza dinamica. Alcuni esempi:

- leggo da db un certo numero di righe, e per ciascuna riga creo uno o più elementi grafici in un pannello (ad esempio una label ed un campo testo)
- man mano che l'utente incrementa/decrementa un campo spinner vengono aggiunti/rimossi dei campi testo in un pannello, uno sotto l'altro

E' questa dinamicità della GUI a runtime che non sto riuscendo a realizzare.
Ho fatto delle prove ma probabilmente la mia scarsa conoscenza della programmazione di GUI mi sta facendo trascurare qualcosa.

Ad esempio, per il secondo caso, ho scritto questo codice:


codice:
    private void numFasceOrarieStateChanged(javax.swing.event.ChangeEvent evt) {

        int num = Integer.parseInt(numFasceOrarie.getValue().toString());  // (anche questo mi sa che si poteva fare in modo più furbo)
        JTextField dynamicTextField;
        for(int i=0; i<num; i++){
            dynamicTextField = new JTextField("fascia_"+i);
            configurationTab.add(dynamicTextFields);
            
        }
    }
intanto volevo vedere se incrementando lo spinner compariva qualcosa, in un secondo momento volevo poi fare la gestione che dicevo su (bisognerà fare una lista di textFields, poi quando incremento lo spinner ne aggiungo uno quando decremento elimino l'ultimo). Però non compare niente ora come ora. Cosa mi sto scordando?

Per completezza riporto anche il codice che netbeans mi ha generato per quel pannello configurationTab:



vi ringrazio!
codice:
        javax.swing.GroupLayout configurationTabLayout = new javax.swing.GroupLayout(configurationTab);
        configurationTab.setLayout(configurationTabLayout);
        configurationTabLayout.setHorizontalGroup(
            configurationTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(configurationTabLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(configurationTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(label1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(numFasceOrarie, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(38, Short.MAX_VALUE))
        );
        configurationTabLayout.setVerticalGroup(
            configurationTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(configurationTabLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(label1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(numFasceOrarie, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(268, Short.MAX_VALUE))
        );
grazie a tutti