[Java] Désactiver un JButton [Résolu/Fermé]

Signaler
Messages postés
375
Date d'inscription
lundi 16 mai 2005
Statut
Membre
Dernière intervention
23 octobre 2007
-
Messages postés
375
Date d'inscription
lundi 16 mai 2005
Statut
Membre
Dernière intervention
23 octobre 2007
-
Bonjour,

j'ai une fenêtre dans laquelle se trouvent des TextFields et un bouton "Valider". Comment faire en sorte que le bouton reste inactif (c'est-à-dire grisé avec impossibilité d'appuyer dessus) tant que tous les champs ne sont pas remplis ?

Merci de votre aide

2 réponses

Messages postés
623
Date d'inscription
vendredi 26 juillet 2002
Statut
Membre
Dernière intervention
11 novembre 2012
968
Salut!


Tu trouveras ci-dessous deux classes.

La première (FormFillActionListener ) est un Listener qui peut enregistrer des JTextField ainsi qu'un JButton qui ne sera accessible que lorsque tous les chmaps enregistrés auprès de lui seront remplis.

Voici le code:

import java.awt.Component;
import java.util.HashMap;
import java.util.Iterator;

import javax.swing.JTextField;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;
import javax.swing.text.JTextComponent;

/*
 * Created on Aug 17, 2005
 *
 */

/**
 * @author HackTrack
 *
 */
public class FormFillActionListener implements CaretListener {
	private Component trigger;
	private HashMap components;

	public FormFillActionListener() {
		super();
		trigger = null;
		components = new HashMap();
	}

	public void caretUpdate(CaretEvent ce) {
		JTextField jtf = (JTextField)ce.getSource();
		Boolean filledField = new Boolean(false);
		if (!jtf.getText().equals("")) {
			filledField = new Boolean(true);
		}
		components.put(jtf, filledField);

		boolean isFilled = true;
		Iterator it = components.keySet().iterator();
		while (it.hasNext()) {
			JTextComponent tc = (JTextComponent)it.next();
			if (((Boolean)components.get(tc)).booleanValue() == false) {
				isFilled = false;
				break;
			}
		}
			this.trigger.setEnabled(isFilled);

		JTextField comp = (JTextField)ce.getSource();
		if (comp.getText() != null && !comp.getText().equals("")) {
			components.put(comp, new Boolean("true"));
		} else {
			components.put(comp, new Boolean("false"));
		}
	}

	public void registerComponent(JTextField tf) {
		tf.addCaretListener(this);
		components.put(tf, new Boolean(false));

	}

	public void unregisterComponent(JTextField tf) {
		tf.removeCaretListener(this);
		components.remove(tf);
	}

	public void setTriggerComponent(Component c) {
		this.trigger = c;
		this.trigger.setEnabled(false);
	}

}



La seconde classe (FormFrame) est une JFrame qui te permet de tester cela.

import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

/*
 * Created on Aug 17, 2005
 *
 */

/**
 * @author HackTracks
 *
 */
public class FormFrame extends JFrame {
	private JTextField lastname;
	private JTextField firstname;
	private JTextField comments;
	private JButton send;

	public FormFrame(String name) {
		super(name);
		initialize();
	}

	private void initialize() {
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		FormFillActionListener fillListener = new FormFillActionListener();
		JPanel formPanel = new JPanel();
		formPanel.setLayout(new GridLayout(4, 2));
		formPanel.add(new JLabel("Nom:"));
		lastname = new JTextField(25);
		fillListener.registerComponent(lastname);
		formPanel.add(lastname);
		formPanel.add(new JLabel("Prénom:"));
		firstname = new JTextField(25);
		fillListener.registerComponent(firstname);
		formPanel.add(firstname);		
		formPanel.add(new JLabel("Commentaire:"));
		comments = new JTextField(40);
		fillListener.registerComponent(comments);
		formPanel.add(comments);
		send = new JButton("Envoyer");
		fillListener.setTriggerComponent(send);
		formPanel.add(send);
		getContentPane().add(formPanel);
	}
	

	public static void main(String[] args) {
		FormFrame form = new FormFrame("Test formulaire");
		form.pack();
		form.setVisible(true);
	}
}



A toi d'adapter le code.


;-)
HackTrack
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 57565 internautes nous ont dit merci ce mois-ci

Messages postés
375
Date d'inscription
lundi 16 mai 2005
Statut
Membre
Dernière intervention
23 octobre 2007
51
Merci beaucoup ca marche nickel !

a+
Messages postés
5939
Date d'inscription
mercredi 26 mai 2004
Statut
Contributeur
Dernière intervention
18 septembre 2009
209
le plus simple a mon sens c'est de faire une petite fonction qui quand il y a une action verifie que tous les champs sont remplis et passe le bouton en actif sinon passe le bouton en inactif.
Messages postés
375
Date d'inscription
lundi 16 mai 2005
Statut
Membre
Dernière intervention
23 octobre 2007
51
Oui c une bonne idée mais le problème, c'est que c un peu lourd...

De plus, est-ce que le fait d'écrire dans un JTextField constitue une action (c'est-à-dire écoutable par un ActionListener) ?