Rechercher : dans
Par :

[Java] Désactiver un JButton

Dernière réponse le 19 aoû 2005 à 09:56:40 jebok, le 17 aoû 2005 à 10:31:53 
 Signaler ce message aux modérateurs

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

Configuration: jdk 1.4.2

Meilleures réponses pour « [Java] Désactiver un JButton » dans :
Supprimer les anciennes versions de Java avec JavaRa Voir JavaRa A propos de la gestion des machines virtuelles Java Présentation de JavaRa Exemple de rapport émis par JavaRa A propos de la gestion des machines virtuelles Java Pour des mises à jour ciblées de java Sun a finalement donné une...
YouTube - Vous avez désactivé JavaScript VoirProblème Lorsque vous naviguez sur certains sites, tels que YouTube, ceux-ci affichent le message d'erreur suivant : Vous avez désactivé JavaScript ou bien vous possédez une ancienne version d'Adobe Flash Player. Téléchargez la dernière version...
Désactiver l'exécution de certains programmes au démarrage VoirDésactiver l'exécution de certains programmes au démarrage - Windows 98/Me/2000/XP/Vista Avec msconfig Avec WinPatrol Avec Startuplite Avec CCleaner Remarques Lorsque vous installez des logiciels, certains s'exécutent à chaque...
[Firefox] plugin Java Jre de Sun VoirA) Les différentes variantes Java chez Sun B) Installation sous Mandriva Limited Edition 2005 ETAPE 1 ETAPE 2: Création du lien symbolique C) Installation sous debian lenny D) Installation sous ubuntu hardy heron A) Les différentes...
Télécharger Java Runtime Environment VoirJava Runtime Environment (JRE) installe la machine virtuelle Java, permettant de jouer en ligne, de discuter avec des personnes dans le monde entier, de calculer les intérêts de votre prêt immobilier ou de visualiser des images en 3D. Ces...
Java - Premier programme VoirPremière application avec Java La première chose à faire est de créer un simple fichier texte (sans mise en forme) et de taper les quelques lignes suivantes : // Votre premiere application en Java class FirstApp { public static void main...
Java - Les types de données VoirLes primitives Java est un langage orienté objet, c'est-à-dire que les éléments manipulés sont des classes, ou plus exactement des objets, c'est-à-dire des instances de classes. Toutefois ces objets contiennent des données possèdant un type (et...
Java - L'héritage VoirLa notion d'héritage Le concept d'héritage est un des concepts les plus importants de la programmation orientée objet, car il conditionne irréversiblement la façon selon laquelle un code Java est écrit. L'héritage est un mécanisme permettant de...

1

Canard007, le 17 aoû 2005 à 10:38:56

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. Please Insert COIN!

Répondre à Canard007

2

jebok, le 17 aoû 2005 à 10:59:10

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) ?

Répondre à jebok

3

HackTrack, le 17 aoû 2005 à 13:47:53

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

Répondre à HackTrack

4

 jebok, le 19 aoû 2005 à 09:56:40
  • +1

Merci beaucoup ca marche nickel !

a+

Répondre à jebok