Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di yuno
    Registrato dal
    Apr 2010
    Messaggi
    62

    [Java] aiutino JTextField

    Ciao, a tutti oggi mi sto impelagando su un piccolo problema riguardante questi simpatici campi di testo! allora espongo subito il problema:
    Ho creato un oggetto che estende JButton con di sopra un JTextFild chiamato campo di testo,
    (ho usato il button perchè rispetta meglio le dimensioni che gli assegni)
    questa classe è di supporto ad un programma che ne riempe una serie di questi oggettini, ma anche tu pui mettere dei valori, adesso in questa classe ha una varibile boleana che se il testo lo inserisce l'utente viene posizionata a true, ora quando il testo viene cancellato dovrebbe posizionarsi a false solo che non lo fa!
    questo è il plainDocument che mi gestisce quello che può essere scritto e quello che no:

    codice:
    private class PianoDiDigitazioneNelleCaselle extends  PlainDocument {
          private int limite;
          public PianoDiDigitazioneNelleCaselle(int limite){this.limite=limite;}
    
           @Override
           public void insertString(int offs, String str, AttributeSet a)throws BadLocationException {
              if (str == null) {
                  return;
              }
              //questa parte serve per verificare che il valore sia inseribile e funziona
              char c=str.charAt(0);
              boolean verificato=false;
              String temp="123456789";
              for(int i=0;i<temp.length();i++){
                  if(c==temp.charAt(i)){verificato=true;break;}
              }
              int val=0;
              if(verificato){val=Integer.parseInt(str);}
              if(getLength()+str.length()<=limite && verificato && val<=nMaxPossibile ){
                  
                  super.insertString(offs, str, a);
    
     // adesso qui dovrebbe essere il problema praticamente non viene mai verificata la condizione
    // che fa diventare il punto non più salvo
    
              if(campoTesto.getText().equals("")){
              setPuntoSalvo(false);
              
              }else{
              setPuntoSalvo(true);}
                  return;
              }
    
              if(verificato&& val<=nMaxPossibile){
                  campoTesto.setText(str);
                  System.out.println("campo testo è"+campoTesto.getText());
              }
    // stessa cosa di prima
    
              if(campoTesto.getText().equals("")){
              setPuntoSalvo(false);
              }else{
              setPuntoSalvo(true);}
         }
       }
    }
    ora magari qualcuno ha già affrontato il problema e sa dove mettere mani a me pare giusto
    l'unico errore credo sia come commentato nel codice che anche che cacello il testo scritto non viene verificata la condizione e quindi "setPuntoSalvo(false);" non viene mai chiamato

  2. #2
    Utente di HTML.it L'avatar di progAnd
    Registrato dal
    Jan 2012
    Messaggi
    119
    Mai usato, ma ti posso dire che se il metodo insertString viene chiamato quando inserisci del testo e quindi non sarà mai vuoto. Metti qualche System.out e guarda i risultati.

    Ciao

  3. #3
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: [Java] aiutino JTextField

    Originariamente inviato da yuno
    codice:
     // adesso qui dovrebbe essere il problema praticamente non viene mai verificata la condizione
    // che fa diventare il punto non più salvo
    
              if(campoTesto.getText().equals("")){
              setPuntoSalvo(false);
              
              }else{
              setPuntoSalvo(true);}
                  return;
              }
    
       }
    }
    campoTesto.getText() cosa ti restituisce? Controlla col debugger (o con una print).

    Eventualmente prova a cambiare la condizione in
    codice:
    campoTesto.getText().trim().length() == 0
    trim toglie eventuali spazi all'inizio e alla fine.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  4. #4
    Utente di HTML.it L'avatar di yuno
    Registrato dal
    Apr 2010
    Messaggi
    62
    Prima di tutto grazie per le risposte, cmq ho provato con le stampe ed effettivamente il metodo "insertString" che ho riscritto, non viene chiamato quando si cancella la riga di testo!
    Ho guardato le API ma non ci ho capito molto, infatti non ho capito che metodo viene chiamato quando viene rimosso il testo dalla textFild se lo trovo il gioco è risolto anche in maniera abbastanza facile ed elegante qualche idea?

  5. #5
    Utente di HTML.it L'avatar di yuno
    Registrato dal
    Apr 2010
    Messaggi
    62
    grazie a tutti ho preferito cambiare completamete la cosa ci ho perso troppo tempo e quindi ho preferito levarlo proprio il "PlainDocumet" ho messo il capotesto a not editable e poi ho inserito io un keyAdapter che fa quello che dico io lo posto per vedere l'altra strada che ho fatto magari potrebbe essere di aiuto a qualcun'altro
    codice:
    campoTesto.addKeyListener(new KeyAdapter() {
    
                @Override
                public void keyTyped(KeyEvent e) {
                    boolean verificato=false;
                    String temp="123456789";
                    for(int i=0;i<temp.length() && !verificato && i<nMaxPossibile;i++){
                    if(e.getKeyChar()==temp.charAt(i)){verificato=true;}
                    }
                    //assodato che è un numero che è possibile inserire
                    if(verificato){
                    int valTemp=Integer.parseInt(""+e.getKeyChar());
                        setPuntoSalvo(true); 
                        campoTesto.setText(""+e.getKeyChar());
                               
                   
                    }else{
                        campoTesto.setText("");
                        setPuntoSalvo(false);
                    }
                }
                
            });
              
        
        }
    come vedete vengono scritti i numeri che voglio e basta se viene premuto un altro pulsante viene cancellato quello che si è scritto fa la stessa cosa di prima

  6. #6
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Avevo capito male quello che intendevi..

    insertString() risponde solo quando viene inserito qualcosa (anche se sarebbe più corretto usare insertUpdate()). Se vuoi fare qualcosa quando viene cancellato un carattere devi usare il metodo remoteUpdate, sempre di PlainDocument.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

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.