Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [JAVA] Creazione dinamica di un frame

    Salve a tutti,
    avrei la necessità di creare un jframe dinamicamente in base ai campi di una tabella di un database...mi spiego:

    Supponiamo di voler creare un jframe (uso Jigloo per le GUI, ma potrei scrivere anche a mano ovviamente) che richieda certi dati e li salvi in un database mysql, in una tabella Impiegato che abbia i campi: Nome, Cognome, Indirizzo.

    Bene...in realtà potrei creare 3 semplici Text e un bottone che esegue la query sql...

    Cosa succede però se aggiungo un campo al database, ad esempio TELEFONO?
    Succede che devo riaggiornare la Jframe e il codice che esegue la query...

    Dunque vi chiedo...come è possibile fare in modo che il Jframe venga costruito automaticamente in base al numero/nome dei campi di una tabella del database? Vorrei dunque che il frame legga in qualche modo dalla tabella quanti campi ci sono e il loro nome e crei tante text con il relativo nome.

    Grazie in anticipo

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

    Re: [JAVA] Creazione dinamica di un frame

    Originariamente inviato da giaomnitel1
    Dunque vi chiedo...come è possibile fare in modo che il Jframe venga costruito automaticamente in base al numero/nome dei campi di una tabella del database?
    Si può fare ... tutto. Devi solo stabilire quale è il livello di "genericità" che vuoi ottenere. Più ti spingi verso la genericità/astrazione e più chiaramente (almeno all'inizio) diventa complesso da scrivere il codice per gestire una certa cosa. Ma poi dopo, alla fine, diventa più semplice e veloce usarlo!

    Ci sono molti livelli, da quello più blando e banale cioè il programmatore che deve preoccuparsi di scrivere tutto il codice (e quasi certamente non proprio "riutilizzabile") per creare la finestra, creare/posizionare ognuno dei campi, gestire le query per una specifica tabella, fino al livello più generico e astratto, dove magari hai una classe es. InputRecordFrame a cui potresti passare solo una Connection e il nome della tabella e la classe si preoccupa di tutto quanto, dal prendere i metadati (descrizioni) relativi alla tabella, determinare numero/tipo dei campi, fino a creare i campi e gestirli, ecc...

    Ripeto: si può certamente fare ma richiede un certo sforzo e una "visione" molto generale delle cose, specialmente, nel caso specifico, di JDBC e di Swing.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Bene...diciamo che sono riuscito ad ottenere i metadati (nomi delle colonne e dimensioni) dal database..

    Ora.....come faccio a creare ad esempio N TextField con nome diverso (uguale al nome del relativo campo database)?

    Cioè...vorrei che vengano eseguite queste istruzioni:

    TextField Nome=new TextField(dimNome);
    TextField Cognome=new TextField(dimCognome);
    TextField Eta=new TextField(dimEta);
    ...

    in modo automatico....nessuno problema per la dimensione perchè viene passata come parametro...ma come faccio a creare gli N oggetti con un nome diverso usando il FOR?

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Non puoi operare nel modo che hai indicato.
    I nomi delle variabili non possono essere dati "a runtime".
    Quello che devi fare è avere una "lista" che sia dinamica e che ti permetta di indicizzare i tuoi campi con il nome che decidi.

    Tramite il ResultSetMetaData riesce ad ottenere il nome dei campi e tutte le sue informazioni.

    Ora, con una HashMap (ad esempio) puoi costruire tutti i campi, ad esempio in questo modo:
    codice:
    ResultSetMetaData rmd = ...;
    HashMap campi = new HashMap();
    for(int j=1; j<rmd.getColumnCount()+1; j++) {
       campi.put(rmd.getColumnName(j), new JTextField( rmd.getColumnDisplaySize() ));
    }
    Quindi, scorrere tutta la HashMap per aggiungere le TextField al tuo JFrame.

    In questo modo, se vuoi ottenere il JTextField relativo al campo "nome", opererai in questo modo:
    codice:
    JTextField txt = (JTextField) campi.get("nome");
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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.