[Java] Désactiver un JButton

Résolu/Fermé
jebok Messages postés 358 Date d'inscription lundi 16 mai 2005 Statut Membre Dernière intervention 23 octobre 2007 - 17 août 2005 à 10:31
jebok Messages postés 358 Date d'inscription lundi 16 mai 2005 Statut Membre Dernière intervention 23 octobre 2007 - 19 août 2005 à 09:56
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
A voir également:

2 réponses

Utilisateur anonyme
17 août 2005 à 13:47
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
jebok Messages postés 358 Date d'inscription lundi 16 mai 2005 Statut Membre Dernière intervention 23 octobre 2007 51
19 août 2005 à 09:56
Merci beaucoup ca marche nickel !

a+
0
Canard007 Messages postés 5929 Date d'inscription mercredi 26 mai 2004 Statut Contributeur Dernière intervention 18 septembre 2009 215
17 août 2005 à 10:38
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.
0
jebok Messages postés 358 Date d'inscription lundi 16 mai 2005 Statut Membre Dernière intervention 23 octobre 2007 51
17 août 2005 à 10:59
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) ?
0