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

    problema con jtextfield

    ciao,
    ho un pannello contenente alcune jtextfield editabili e un bottone.

    Le jtextfield e le jtextarea le valorizzo sulla base di una select su una tabella.
    Alcune sono vuote perchè le corrispondenti colonne della tabella sono vuote.

    Quando premo il bottone dovrei fare l'update del valore "corrente" presente nelle jtextfield.

    Le situazioni che vorrei gestire sono 2:

    1) devo modificare i valori presenti in alcune jtextfield (ad es. se c'è scritto "aaa" lo devo modificare in "aa" e fare poi l'update sulla tabella)
    2) devo scrivere dei valori nelle jtextfield vuote e fare poi l'update nella tabella.

    esempio

    Supponiamo di avere 2 jtextfield una jtextfield1 contenente "aaa" e una jtextfield2 vuota.
    Memorizzo i loro valori in delle variabili

    codice:
    campo1 = jtextfield1.getText(); 
    campo2 = jtextfield2.getText();
    questa la parte di codice relativa al pulsante
    codice:
    public void actionPerformed (ActionEvent e) {
    if(e.getSource() == jb_modifica){
       modifica();
    }
    
    public void modifica(){
      System.out.println("campo1: "+campo1);
      System.out.println("campo2: "+campo2);
    }
    Il problema è che appena effettuo delle modifiche dall'interfaccia (ad es. jtextfield1 la modifico in "aa" e jtextfield2 la modifico scrivendo "bbb") e premo il bottone che mi servirà per fare gli update, le variabili continuano a contenere i valori iniziali "aaa" e stringa vuota.


    Non mi è chiaro come gestire queste modifiche.
    E' realizzabile con j2se o devo ricorrere necessariamente alle jsp?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Re: problema con jtextfield

    Semplicemente perchè memorizzi i loro valori nelle variabili...

    Quando modifichi il valore di una JTextField, ciò che viene cambiato è lo stato interno del controllo... non di certo le variabili che hai dichiarato tu e di cui il JTextField non può avere alcuna conoscenza.

    Quello che devi fare tu è reperire il valore attuale del JTextField e, eventualmente, confrontarlo con il valore delle variabili (che conterrà sempre il valore vecchio).

    codice:
    public void modifica(){
      System.out.println("campo1: "+jtextfield1.getText());
      System.out.println("campo2: "+jtextfield2.getText());
    }
    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

  3. #3
    ...sono daccordo, non ho dato una spiegazione completa.

    Le jtextfield le genero "dinamicamente" (in modo tale che se aggiungo colonne alla tabella, automaticamente creo la corrispondente jtextfield) popolandole coi valori della tabella.
    codice:
    ResultSet rs= statement.executeQuery("select * from COL where tname='Tabella' 
    and COLNO between 1 and '"+max+"'"+"order by COLNO");
    
    int i=0;
    while(rs.next()){
    colonna[i] = rs.getString(3);//nome colonna
    tipo_colonna[i] = rs.getString(4);//tipo della colonna
    					
    if{tipo_colonna[i].equals("VARCHAR2"))
      panel[i] = new JPanel();
      y_panelSub = y_panelSub+60;
      panel[i].setLayout(null);
      panel[i].setBounds(0,y_panelSub,400,60);
      jl = new JLabel(colonna[i]);
      jl.setFont(new Font("Verdana",Font.PLAIN,12));
     jtf = new JTextField(100);
     jtf.setText(campi_tb[i]);//campi_tb[] array contenente le colonne della tabella
    	
    if (colonna[i].equals("CAMPO1")){
      campo1 = jtf.getText()
    } 					
      jtf.setFont(new Font("Verdana",Font.BOLD,10));
     jl.setBounds(10,20,180,30);
     jtf.setBounds(210,30,160,20);
     panel[i].add(jl);
     panel[i].add(jtf);
     }
    					
     else if (tipo_colonna[i].equals("NUMBER")){
      panel[i] = new JPanel();
      y_panelSub = y_panelSub+70;
      panel[i].setLayout(null);
      panel[i].setBounds(0,y_panelSub,400,60);
      jl = new JLabel(colonna[i]);
      jl.setFont(new Font("Verdana",Font.PLAIN,12));
      jtf = new JTextField(22);
      jtf.setText(campi_tb[i]);
    						
      if (colonna[i].equals("CAMPO2")){
        campo2 = jtf.getText();
      } 						
      jtf.setFont(new Font("Verdana",Font.BOLD,10));
      jl.setBounds(10,20,180,20);
      tf.setBounds(210,20,170,20);
      panel[i].add(jl);
      panel[i].add(jtf);
    						
      i++;
      }
    Non so come differenziare le varie jtextfield.
    Nel metodo modifica,infatti, se faccio System.out.println("campo1: "+jtf.getText()); restituisce la stringa vuota, perchè non capisce a quale jtf faccio riferimento.

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Non ho capito gran ché, ma se non sai come identificare una singola JTextField allora probabilmente stai sbagliando qualcosa nella struttura del programma.

    Dici che le JTextField le generi dinamicamente... ok, ma non puoi perdere i riferimenti. Da quello che vedo tu usi la stessa variabile "jtf" per fare varie operazioni... può andar bene solo se, ad ogni nuova istanziazione, non perdi il riferimento di quella di prima.

    Generalmente, quando si hanno più componenti generati dinamicamente, o ci si appoggia ad una struttura dati apposita (ArrayList, Vector, HashMap) oppure si progetta la cosa in modo diverso.

    Usando un ArrayList, ad esempio, ogni nuova istanza di JTextField dovrebbe essere aggiunta all'ArrayList per poterla recuperare in seguito.

    Oltretutto vedo che per ciascuna JTextField crei un JPanel, lo metti da qualche parte... insomma... direi che la cosa è piuttosto nebulosa e, probabilmente, mal strutturata.


    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

  5. #5
    Per come ho strutturato il codice,nel metodo modifica, riesco a visualizzare solo l'ultimo valore di jtf:

    codice:
    jtf.setText(jtf.getText());
    System.out.println(jl.getText()+" "+jtf.getText());
    Nell'esempio di codice che ho riportato precedentemente, visualizzo solo il contenuto corrispondente alla jtextfield di campo2 e se ne modifico il suo contenuto visualizzo tale modifica.

    Vorrei iterare questo per tutte le jtextfield.

    Ho provato a fare così:
    codice:
    jtfa[i] = jtf.getText();
    ma mi dà il seguente errore "Type mismatch: cannot convert from String to JTextField"

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.