Bonjour
Voila j'aimerais savoir comment est il possible de detecter le remplissage d'un JTextField pour que je change la visibilité d'un composant quand le JTExtField est remplie automatique par une action d'un bouton ou par l'utilisateur lui meme?
Version imprimable
Bonjour
Voila j'aimerais savoir comment est il possible de detecter le remplissage d'un JTextField pour que je change la visibilité d'un composant quand le JTExtField est remplie automatique par une action d'un bouton ou par l'utilisateur lui meme?
Voila si j'ai bien compris ton problème je pense que tu peux le résoudre de la manière suivante.
En définissant un Event sur ton textfield et en réalisant l'action souhaité:
J'espere que ca pourra t'aider. Bonne continuationCode:
1
2
3
4
5
6
7 jMonTextField.addKeyListener(new java.awt.event.KeyAdapter() { public void keyTyped(java.awt.event.KeyEvent e) { System.out.println("Détection d une touche"); getJAnnulerButton().setEnabled(true); // je rend clickable mon boutton... } });
Cordialement
Bonjour,
Selon quel critère sais-tu qu'il est "rempli" ? Au bout de 2 caractères ? de 3 ? etc...
Nicolas
La méthode que je t'ai donné marche bien je pense pour le cas ou un utilisateur rempli le champs...
En ce qui concerne le remplissage depuis l'action sur un bouton tu dois pouvoir directement changer la visibilité de ton composant dans l'actionperformed de ton bouton...
Oki j'ai compris ton exemple mais j'ai oublié de rajouter un detail si tu pressed sur un key mais qu'apres tu effaces ca mettra le bouton actif donc probleme.
Ensuite le fait qu'il soit mal rempli c'est pas un probleme c'est géré apres, mais effectivement le nombre de caractere minimal est de 3.
Ensuite pour l'action sur le bouton c'est le choix d'un fichier par un JFileCooser le truc c'est que tu peux annuler l'action donc faut voir.
Désolé, mais je ne comprends toujours pas. Quand tu dis que tu veux lancer une action une fois le JTextField "rempli", que signifie "rempli" ? Qu'attends-tu exactement que l'utilisateur y rentre ?
Nicolas
Il me semble qu'un CaretListener permet de réagir quelle que soit la source du texte (clavier, copier-coller, programme, ...). Ce sera peut-être mieux approprié qu'un KeyListener.
Bon je recommence rien que pour toi, je veux juste rendre un bouton selectable quand le champs est different de vide si tu prefere.Citation:
Envoyé par Nicolas_75
esaye avec un DocumentListener sur le Document de ton JTextComponent ;-)
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83 import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; /** * Created by IntelliJ IDEA. * User: bebe * Date: 07-sept.-2006 * Time: 18:53:51 * To change this template use File | Settings | File Templates. */ public class MySimplePanel extends JPanel implements DocumentListener { private JScrollPane contentScrollPane = new JScrollPane(); private JButton sendButton = new JButton(); private JButton clearButton = new JButton(); private JTextArea contentTextArea = new JTextArea(); public void insertUpdate(DocumentEvent e) { sendButton.setEnabled(!(e.getDocument().getLength() == 0)); clearButton.setEnabled(!(e.getDocument().getLength() == 0)); } public void removeUpdate(DocumentEvent e) { insertUpdate(e); } public void changedUpdate(DocumentEvent e) { insertUpdate(e); } public MySimplePanel() { this.setSize(new Dimension(400, 121)); this.setLayout(new GridBagLayout()); sendButton.setText("Send"); sendButton.setEnabled(false); clearButton.setText("Clear"); clearButton.setEnabled(false); contentTextArea.getDocument().addDocumentListener(this); contentScrollPane.getViewport().add(contentTextArea, null); this.add(contentScrollPane, new GridBagConstraints(0, 0, GridBagConstraints.REMAINDER, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0, 0)); this.add(sendButton, new GridBagConstraints(1, 1, 1, 1, 1.0, 0.0, GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0, 0, 5, 5), 0, 0)); this.add(clearButton, new GridBagConstraints(2, 1, 1, 1, 0.0, 0.0, GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0, 0, 5, 5), 0, 0)); } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { JFrame myFrame = new JFrame("Modellistener works great"); myFrame.setSize(300, 180); myFrame.add(new MySimplePanel()); myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); myFrame.setLocationRelativeTo(null); myFrame.setVisible(true); } }); } }
Efficace et élégant. :hola:Citation:
avec un DocumentListener sur le Document ...
Je ne maîtrise pas tres bien les solutions proposés par mes collégues forumeurs... Elles sont peut etre plus efficace mais si je peux te donner une indication pour continuer sur ma premiere remarque.
Il t'est possible de complete la définition du KeyPressed en faisant un test sur le getText() du TextField. En comparant la taille du text récupéré avec celle souhaité si celle ci est inférieur tu disable ton button sinon tu l'active...
C'est surment un peu plus laborieux mais ca utilise des méthode relativement simple.
Bon courage...
La solution de bbclone est tout simplement ce que je recherchais, mais ne connaissant pas toutes les classes java elle m'en a appris pas mal.
Tout simplement merci.
je veut juste dire quelque chose a ythim (je veut pas polluer ton sujet zulot)
si tu fait
ca veux dire que tu dit que tout le texte qui est dans le JTextComponent a ete mis en tappant sur des touche.Code:
1
2
3
4
5
6 myTextField.addKeyListener( new KeyAdapter() { public void keyTyped(java.awt.event.KeyEvent e) { ... } } }
maintnant si je rajoute du texte avec la souris (par exemple right-click + paste ou selectione un texte dans une autre application et drag&drop sur le JTextComponent....) ton keyListener sera pas appler.
tu aura (deja) un probleme!
Non tu pollue pas du tout c'est ce que j'essayais de lui expliquer au debut.