Disabilitare un jbutton quando si scrive su una jtextfield

di il
24 risposte

24 Risposte - Pagina 2

  • Re: Disabilitare un jbutton quando si scrive su una jtextfield

    Okay ho modificato la cosa dei FocusListener eliminando l'implementazione a livello di classe, e ho modificato quella cosa che tu mi hai detto facendo così:
    		super("Gestione consumazioni");
    
    il problema è che mi da errore, mi dice che sintatticamente è errato..
    poi un'altra cosa, io al WindowsListener creavo una nuova classe che ho chiamato GestoreFinestra con tutti i vari metodi per il controllo della finestra e in + passavo come parametro il JFrame.. quindi:
    this.addWindowListener(new GestoreFinestra());
    nelle parentesi devo mettere super? o cosa?
  • Re: Disabilitare un jbutton quando si scrive su una jtextfield

    palestrato ha scritto:


    okay ho modificato la cosa dei FocusListener eliminando l'implementazione a livello di classe, e ho modificato quella cosa che tu mi hai detto facendo così:
    		super("Gestione consumazioni");
    
    il problema è che mi da errore, mi dice che sintatticamente è errato..
    Se la tua classe estende JFrame, nel tuo costruttore è lecito invocare il super-costruttore JFrame(String title) usando appunto super(unastringa);

    Ma la invocazione del super-costruttore deve essere la prima istruzione nel tuo costruttore.

    palestrato ha scritto:


    poi un'altra cosa, io al WindowsListener creavo una nuova classe che ho chiamato GestoreFinestra con tutti i vari metodi per il controllo della finestra e in + passavo come parametro il JFrame.. quindi:
    this.addWindowListener(new GestoreFinestra());
    nelle parentesi devo mettere super? o cosa?
    Nella tua classe frame, all'interno del tuo costruttore (e solo dopo la invocazione del super-costruttore), il this è il riferimento alla istanza del tuo frame in costruzione.
  • Re: Disabilitare un jbutton quando si scrive su una jtextfield

    Okay ho risolto grazie mille, ho implementato il documentListener così:
    tipo.getDocument().addDocumentListener(new AscoltatoreDocumento(tipo,prezzo,fine));
    e poi ho creato la classe:
    import javax.swing.JButton;
    import javax.swing.JTextField;
    import javax.swing.event.DocumentEvent;
    import javax.swing.event.DocumentListener;
    
    
    public class AscoltatoreDocumento implements DocumentListener {
    	private JTextField tipoconsumazione;
    	private JTextField prezzoconsumazione;
    	private JButton finespesa;
    	
    	public AscoltatoreDocumento(JTextField tipo, JTextField prezzo, JButton fine){
    		this.tipoconsumazione=tipo;
    		this.prezzoconsumazione=prezzo;
    		this.finespesa=fine;
    	}
    	
    	@Override
    	public void changedUpdate(DocumentEvent e) {
    		// TODO Auto-generated method stub
    		
    	}
    
    	@Override
    	public void insertUpdate(DocumentEvent e) {
    		// TODO Auto-generated method stub
    		if(tipoconsumazione.getText()!=null && prezzoconsumazione.getText()!=null){
    			finespesa.setEnabled(true);
    		}else{
    			finespesa.setEnabled(false);
    		}
    	}
    
    	@Override
    	public void removeUpdate(DocumentEvent e) {
    		// TODO Auto-generated method stub
    
    	}
    
    }
    
    l'unico errore che mi esce in fase di realizzazione è che il bottone finespesa diventa utilizzabile quando solo il campo tipoconsumazione viene riempito, io invece vorrei che il bottone diventi utilizzabile solo quando i due campi textfield sono riempiti..
  • Re: Disabilitare un jbutton quando si scrive su una jtextfield

    ...
  • Re: Disabilitare un jbutton quando si scrive su una jtextfield

    palestrato ha scritto:


    Okay ho risolto grazie mille, ho implementato il documentListener così:
    tipo.getDocument().addDocumentListener(new AscoltatoreDocumento(tipo,prezzo,fine));
    Devi registrare sia su tipo che su prezzo, altrimenti non regge la combinazione dei due.
    La istanza del listener può benissimo essere la stessa, non c'è bisogno di istanziarne due, visto che lo "stato" è composto solo dai riferimenti ai componenti.

    palestrato ha scritto:


    e poi ho creato la classe:
    public class AscoltatoreDocumento implements DocumentListener {
        ......
    Devi gestire tutti i tre tipi di aggiornamento (insertUpdate e changedUpdate e removeUpdate). Ma allo stesso modo, nel senso che non importa quale sia. Dopo che è successo "qualcosa" (e ripeto, qualunque cosa sul campo), se entrambi i campi non sono vuoti allora fai X, altrimenti fai Y.

    P.S. getText dei componenti di testo non restituisce mai null (che io sappia). Al limite una stringa vuota ("")
  • Re: Disabilitare un jbutton quando si scrive su una jtextfield

    Allora io ho fatto così:
    
    tipo.getDocument().addDocumentListener(new AscoltatoreDocumento(tipo,fine));
    prezzo.getDocument().addDocumentListener(new AscoltatoreDocumento(prezzo,fine));
    
    non ho capito quella cosa che mi hai detto sul "non instanziarne due di classi " comunque poi ho fatto così:
    public void changedUpdate(DocumentEvent e) {
    		// TODO Auto-generated method stub
    		if(campoditesto.getText()==""){
    			bottone.setEnabled(false);
    		}else{
    			bottone.setEnabled(true);
    		}
    	}
    
    	@Override
    	public void insertUpdate(DocumentEvent e) {
    		if(campoditesto.getText()==""){
    			bottone.setEnabled(false);
    		}else{
    			bottone.setEnabled(true);
    		}
    	}
    
    	@Override
    	public void removeUpdate(DocumentEvent e) {
    		// TODO Auto-generated method stub
    		if(campoditesto.getText()==""){
    			bottone.setEnabled(false);
    		}else{
    			bottone.setEnabled(true);
    		}
    	}
    ma comunque il risultato è tale e quale a quello di prima.. cioè basta che il campo tipoconsumazione sia pieno e il bottone fineconsumazione si attiva
  • Re: Disabilitare un jbutton quando si scrive su una jtextfield

    palestrato ha scritto:


    allora io ho fatto così:
    
    tipo.getDocument().addDocumentListener(new AscoltatoreDocumento(tipo,fine));
    prezzo.getDocument().addDocumentListener(new AscoltatoreDocumento(prezzo,fine));
    
    Il listener deve ricevere e tenersi entrambi i campi e il pulsante.
    Come era prima:

    new AscoltatoreDocumento(tipo,prezzo,fine)

    era sicuramente più sensato di come hai fatto adesso.

    palestrato ha scritto:


    non ho capito quella cosa che mi hai detto sul "non instanziarne due di classi "
    Che non è necessario fare 2 new AscoltatoreDocumento( ....), ne basta solo uno, passato poi ai due addDocumentListener.

    palestrato ha scritto:


    public void changedUpdate(DocumentEvent e) {
    		// TODO Auto-generated method stub
    		if(campoditesto.getText()==""){
    			bottone.setEnabled(false);
    		}else{
    			bottone.setEnabled(true);
    		}
    	}
    
    	@Override
    	public void insertUpdate(DocumentEvent e) {
    		if(campoditesto.getText()==""){
    			bottone.setEnabled(false);
    		}else{
    			bottone.setEnabled(true);
    		}
    	}
    
    	@Override
    	public void removeUpdate(DocumentEvent e) {
    		// TODO Auto-generated method stub
    		if(campoditesto.getText()==""){
    			bottone.setEnabled(false);
    		}else{
    			bottone.setEnabled(true);
    		}
    	}
    Innanzitutto il contenuto delle stringhe (degli oggetti in generale) si confronta con equals() ... NON con ==. Questa è una cosa super-ultra-basilare.

    E come ho detto poco fa, servono entrambi i campi se vuoi che il pulsante si abiliti solo quando entrambi i campi non sono vuoti.

    E ad ogni modo, la cosa logica sarebbe fare un piccolo metodo privato usato dai tre metodi ... non certo replicare il codice.
  • Re: Disabilitare un jbutton quando si scrive su una jtextfield

    Ho modificato così:
    private void Controllo(){
    		 
    		if(tipo.getText().equals("")&&prezzo.getText().equals("")){
    			bottone.setEnabled(false);
    		}else{
    			bottone.setEnabled(true);
    		}
    	}
    ma non cambia nulla e poi ho fatto quella cosa che mi hai detto:
    AscoltatoreDocumento ascoltatore = new AscoltatoreDocumento(prezzo,tipo,fine);
    		
    		tipo.getDocument().addDocumentListener(ascoltatore);
    		prezzo.getDocument().addDocumentListener(ascoltatore);
  • Re: Disabilitare un jbutton quando si scrive su una jtextfield

    palestrato ha scritto:


    		if(tipo.getText().equals("")&&prezzo.getText().equals("")){
    			bottone.setEnabled(false);
    		}else{
    			bottone.setEnabled(true);
    		}
    	}
    Così il pulsante si abilita se almeno uno dei due campi non è vuoto.

    Se tu vuoi abilitare il pulsante solo se entrambi i due campi non sono vuoti .... allora ci va un || (OR) invece che && (AND).
  • Re: Disabilitare un jbutton quando si scrive su una jtextfield

    Infatti hai ragione, grazie mille
Devi accedere o registrarti per scrivere nel forum
24 risposte