Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442

    Mostrare campi di database in jtextfield

    Supponendo che dobbiate mostrare dei dati estratti da un database in una finestra con dei campi che possono essere anche editati per modificare i dati stessi, come fareste?
    Perché io per esempio per riempire una jlist uso un vettore in cui ho passato tutti i campi provenienti dal db, e per mostrarli uso una serie di setText() sui vari jtextfield della finestra.
    Mi stavo chiedendo se c'è un modo più efficiente per farlo.

    Grazie.

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Jamie04 Visualizza il messaggio
    Supponendo che dobbiate mostrare dei dati estratti da un database in una finestra con dei campi che possono essere anche editati per modificare i dati stessi, come fareste?
    Perché io per esempio per riempire una jlist uso un vettore in cui ho passato tutti i campi provenienti dal db, e per mostrarli uso una serie di setText() sui vari jtextfield della finestra.
    Mi stavo chiedendo se c'è un modo più efficiente per farlo.
    Per visualizzare N "record" con più campi, sicuramente JTable. Per la editazione dei dati si può anche usare la editabilità delle celle in JTable ma si può anche fare in altri modi. Es. l'utente seleziona un record (riga in JTable) e poi preme un pulsante es. "Modifica" e si apre una dialog con layout "a form" per modificare i dati.
    È questo che intendevi?
    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
    Sep 2012
    Messaggi
    442
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Per visualizzare N "record" con più campi, sicuramente JTable. Per la editazione dei dati si può anche usare la editabilità delle celle in JTable ma si può anche fare in altri modi. Es. l'utente seleziona un record (riga in JTable) e poi preme un pulsante es. "Modifica" e si apre una dialog con layout "a form" per modificare i dati.
    È questo che intendevi?

    In realtà non facevo un discorso teorico ma mi piacerebbe vedere qualche pezzo di vostro codice che riguarda la questione, so dell'esistenza delle jtable che in effetti sono una delle scelte possibili e più idonee, ma stavo parlando proprio della form di inserimento/modifica/mostra dei dati.

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    Altro dilemma: se il campo è numerico come lo mostro nel jtextfield?
    Potrei adottare degli stratagemmi tipo farlo diventare una stringa ma il problema è che il campo deve poter essere editabile e quindi quando si modifica e si salva deve tornare ad essere un numero (float in questo caso).
    Una cosa del genere mi porterebbe problemi?
    productPrice.setText("" + selectedProduct.getProductPrice());

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Jamie04 Visualizza il messaggio
    mi piacerebbe vedere qualche pezzo di vostro codice che riguarda la questione
    stavo parlando proprio della form di inserimento/modifica/mostra dei dati.
    Beh, non ho codice recente e "pronto" da mostrarti .... ora che ci penso però tra i miei "vecchi" Java Examples nella sezione "AWT/Swing – Tables" c'è un esempio di tabella con table model custom e con dialog di editazione dei dati.

    Quote Originariamente inviata da Jamie04 Visualizza il messaggio
    Altro dilemma: se il campo è numerico come lo mostro nel jtextfield?
    Ci sono molti modi per farlo: usare un componente di una libreria esterna, usare JFormattedTextField di Swing o anche usare in modo un po' oculato JTextField.
    Il punto è che se si prevede di dover gestire svariati input "numerici", bisogna trovare una buona soluzione che permetta di incapsulare la logica che altrimenti sarebbe sparpagliata. E in sostanza si tratta solo di applicare i principi della programmazione ad oggetti per ottenere qualcosa di ben incapsulato e facilmente riutilizzabile.

    Esempio semplice (codice parziale e non provato):

    codice:
    public class IntegerNumberField extends JTextField {
        public IntegerNumberField(int columns) {
            super(columns);
        }
    
        public Integer getIntegerValue() {
            String text = getText();
    
            if (text.length() > 0) {
                return Integer.valueOf(text);
            } else {
                return null;
            }
        }
    
        public void setIntegerValue(Integer value) {
            if (value != null) {
                setText(value.toString());
            } else {
                setText("");
            }
        }
    
        public void setIntValue(int value) {
            setText(String.valueOf(value));
        }
    }

    Questo già basterebbe per un semplice campo numerico intero senza tanti fronzoli. Ma almeno la logica di conversione è incapsulata qui dentro ... non sparpagliata altrove.
    Potrei anche mettere ad esempio nel costruttore la impostazione di un Document per "filtrare" immediatamente i caratteri non validi durante qualunque tipo di input. Ma ripeto, verrebbe fatto 1 volta sola, qui dentro e ben nascosto al resto.
    Ultima modifica di andbin; 15-04-2014 a 22:31
    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 © 2025 vBulletin Solutions, Inc. All rights reserved.