Bonjour,
Voilà j'ai un petit soucis: je n'arrive pas à faire un .setText("blabla"); d'un JTextField après lui avoir mi un .addActionListener();
Quelqu'un a une idée ?
Version imprimable
Bonjour,
Voilà j'ai un petit soucis: je n'arrive pas à faire un .setText("blabla"); d'un JTextField après lui avoir mi un .addActionListener();
Quelqu'un a une idée ?
Un petit bout de code, pour pouvoir voir le contexte ?
Cela me déclenche l'erreur suivante :Code:
1
2
3
4
5 JTextField txtID = new JTextField(5); txtID.setBounds(110, 32, 180, 23); txtID.setBackground(Color.RED); txtID.getDocument().addDocumentListener(this); txtID.setText("blablabla");
Alors que si txtID.setText("blablabla"); je le mets juste une ligne au dessus, ça marche très bien.Code:Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
En fait mon but est de limiter le nombre de caractères dans mon txtID. Après de multiples recherches sur google, j'ai décidé de faire mon propre algorithme.
Mais voilà, La fameuse ligne ne fonctionne pas.Code:
1
2
3
4
5
6
7
8
9 if (txtID.getText().length() > 5) { String ID = ""; for (int i = 0; i < 5; i++) ID += txtID.getText().charAt(i); txtID.setText(ID); }
Je pense que l'erreur doit être dans la méthode "insertUpdate(DocumentEvent)".
Dans ce qui suit "Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException", une des ligne doit indiquer le nom de ton fichier java suivi du numéro de ligne où c'est produit l'erreur, qu'elle est cette ligne ?
Une remarque pour créer un texte de 5 caractères à partir du début d'un texte plus grand, tu peux faire
Code:txtID.setText( txtID.getText().substring(0, 5) );
Je me suis trompé de message d'erreur dsl :oops:
Voilà, c'est le bon cette fois :PCode:
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 init: deps-jar: compile: Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: Attempt to mutate in notification at javax.swing.text.AbstractDocument.writeLock(AbstractDocument.java:1343) at javax.swing.text.AbstractDocument.replace(AbstractDocument.java:662) at javax.swing.text.JTextComponent.setText(JTextComponent.java:1441) at videotheque.frmInfos.TextChanged(frmInfos.java:962) at videotheque.frmInfos.insertUpdate(frmInfos.java:928) at javax.swing.text.AbstractDocument.fireInsertUpdate(AbstractDocument.java:184) at javax.swing.text.AbstractDocument.handleInsertString(AbstractDocument.java:754) at javax.swing.text.AbstractDocument.insertString(AbstractDocument.java:711) at javax.swing.text.PlainDocument.insertString(PlainDocument.java:114) at javax.swing.text.AbstractDocument.replace(AbstractDocument.java:673) at javax.swing.text.JTextComponent.replaceSelection(JTextComponent.java:1099) at apple.laf.CUIAquaLookAndFeel$KeyTypedAction.actionPerformed(CUIAquaLookAndFeel.java:1082) at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1576) at javax.swing.JComponent.processKeyBinding(JComponent.java:2772) at javax.swing.JComponent.processKeyBindings(JComponent.java:2807) at javax.swing.JComponent.processKeyEvent(JComponent.java:2735) at java.awt.Component.processEvent(Component.java:5379) at java.awt.Container.processEvent(Container.java:2010) at java.awt.Component.dispatchEventImpl(Component.java:4068) at java.awt.Container.dispatchEventImpl(Container.java:2068) at java.awt.Component.dispatchEvent(Component.java:3903) at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1826) at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:681) at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:938) at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:810) at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:645) at java.awt.Component.dispatchEventImpl(Component.java:3941) at java.awt.Container.dispatchEventImpl(Container.java:2068) at java.awt.Window.dispatchEventImpl(Window.java:1791) at java.awt.Component.dispatchEvent(Component.java:3903) at java.awt.EventQueue.dispatchEvent(EventQueue.java:463) at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:269) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:184) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:176) at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
le code se situe dans frmInfos.java (qui est une JFrame), et la ligne 962 est celle ou se situe txtID.setText("blabla");
L'erreur indique que le contenu du JTextField n'est pas modifiable pendant le traitement d'un événement de modification.
Utilise plutôt un FocusListener pour modifier le JTextField en fin de saisie ou l'événement de fermeture de la fenêtre qui le contient.
Pourrais-tu détailler davantage stp, je ne te suis pas trop là :oops:
Comme tu ne peux pas modifier, le texte pendant la saisie, une solution est d'utiliser un événement qui a lieu après.
Parmi ceux là Il y a l'événement de perte du focus du JTextField et la fermeture de la fenêtre (ou l'action sur le bouton qui valide la fermeture de la fenêtre) qui contient le JTextField.
C'est juste une idée, à toi de voir dans le contexte de ton appli, si elle est bonne ou non.
Ah d'accord je vois mais le soucis c'est qu'avec ta proposition je ne peux en aucun cas faire :
à chaque fois que le texte du JTextField change.Code:txtID.setText( txtID.getText().substring(0, 5) );
Ok mais c'est bon je viens de trouver une alternative.
En fait je le fais dans l'événement keyReleased et donc c'est bon ça marche nikel.
Merci d'avoir prêté attention à mon problème.