Disparition du pointeur dans un TextArea

Le
jfa
Bonjour
J'ai un TextArea dans une application
Quand je tape du texte le "caret" suit bien la frappe mais le pointeur
souris disparait.
Pour le retrouver je suis obligé de recliquer sur le TextArea.
Que faut-il que je fasse pour que le pointeur reste visible pendant la
frappe ?
Merci d'avance
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
TestMan
Le #219624
Bonjour
J'ai un TextArea dans une application
Quand je tape du texte le "caret" suit bien la frappe mais le pointeur
souris disparait.
Pour le retrouver je suis obligé de recliquer sur le TextArea.
Que faut-il que je fasse pour que le pointeur reste visible pendant la
frappe ?
Merci d'avance


Bonjour,

Pouvez-vous poster un exemple de code minimum démontrant le problème
(cas de test) ?

A+
TM

jfa
Le #219623
C'est un simple TextArea dans une Frame.
Dans Windows XP.
Quand on tape du texte le curseur de la souris disparait.
Il faut cliquer ou sortir et revenir dans la zone de texte pour qu'il
réapparaisse.

Exemple :

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class Test extends Frame{

public static void main (String args[]) {
Test test = new Test();
test.setBounds(200, 200, 200, 200);
test.setVisible(true);
}

public Test () {
super ("Test");
TextArea txta = new TextArea();
this.add("Center", txta);
this.addWindowListener(new WindowAdapter(){
public void windowClosing (WindowEvent e) {
System.exit(0);
}
});
}
}

Merci de vous intéresser à ce problème.
jfa





Bonjour,

Pouvez-vous poster un exemple de code minimum démontrant le problème (cas
de test) ?

A+
TM



jfa
Le #219622
J'ai résolu le problème en ajoutant ces lignes dans le constructeur :

txta.addKeyListener (new KeyAdapter(){
public void keyReleased (KeyEvent e) {
txta.setEnabled (false);
txta.setEnabled (true);
}
});

Bien sûr ça clignote un peu mais au moins le curseur reste apparent.
Si quelqu'un a une autre solution il est le bienvenu.
jfa
Julien Balas
Le #219621
C'est un simple TextArea dans une Frame.
Dans Windows XP.
Quand on tape du texte le curseur de la souris disparait.
Il faut cliquer ou sortir et revenir dans la zone de texte pour qu'il
réapparaisse.


JDK 1.4,
Windows XP Pro
Theme Classic

ton exemple marche bien, le curseur ne disparaît pas.

--
JB

jfa
Le #219620
Tu as de la chance.
Es-tu sous WinXP ?
Mais parlons-nous bien de la même chose ?
C'est le curseur de la souris qui disparait, pas celui qui suit la frappe du
texte.
Dans le bloc-notes de Windows, le curseur de la souris disparaît pendant une
seconde puis réapparait.
Dans un TextArea il ne réapparait pas.
jfa

C'est un simple TextArea dans une Frame.
Dans Windows XP.
Quand on tape du texte le curseur de la souris disparait.
Il faut cliquer ou sortir et revenir dans la zone de texte pour qu'il
réapparaisse.


ton exemple marche bien, le curseur ne disparaît pas.
JB



Julien Balas
Le #219619
Tu as de la chance.
Es-tu sous WinXP ?
Mais parlons-nous bien de la même chose ?
C'est le curseur de la souris qui disparait, pas celui qui suit la frappe du
texte.


oups, j'avais mal lu.
J'ai le même comportement que toi.

désolé.

Dans le bloc-notes de Windows, le curseur de la souris disparaît pendant une
seconde puis réapparait.
Dans un TextArea il ne réapparait pas.


jfa
Le #219618
Pour ceux que ça intéresse, j'ai trouvé encore une meilleure solution :

private TextArea txta ;
private boolean retablirLeCurseur ;

Dans le constructeur :

txta.addKeyListener (new KeyAdapter(){
public void keyReleased (KeyEvent e) {
retablirLeCurseur = true;
}
});
txta.addMouseMotionListener (new MouseMotionAdapter(){
public void mouseMoved (MouseEvent e) {
if (retablirLeCurseur){
txta.setCursor (Cursor.getPredefinedCursor
(Cursor.TEXT_CURSOR));
retablirLeCurseur = false;
}
}
});

Le curseur disparait mais réapparait dès qu'on bouge la souris
Et ça ne clignote pas.
jfa
Sylvain
Le #219574
jfa wrote on 20/07/2006 12:53:
C'est un simple TextArea dans une Frame.
Dans Windows XP.
Quand on tape du texte le curseur de la souris disparait.
Il faut cliquer ou sortir et revenir dans la zone de texte pour qu'il
réapparaisse.


ou simplement déplacer la souris (physique) pour voir son curseur
réapparaitre ... pour permettre de sélectionner une séquence du textarea
ou aller cliquer ailleurs.

ce comportement graphique est non simplement intentionel (aucune raison
de le patcher salement) mais également utile: il évite que ce curseur ne
cache le texte en cours d'édition - forcer sa visibilité ne fera
qu'enquiquiner les utilisateurs a) qui ont l'habitude d'avoir une zone
de saisie propre, b) qui généralement ne panique pas si le curseur est
momentanément caché.

donc pourquoi perdre son temps à imaginer un truc nuisible ?? comprends-pas.

Sylvain.

Sylvain
Le #219573
Sylvain wrote on 20/07/2006 23:46:

ou simplement déplacer la souris (physique) pour voir son curseur
réapparaitre ...


ok, en fait non, j'ai péché par certitude; ça marche normalement avec un
javax.swing.JtextArea mais pas avec un java.awt.TextArea -- il faut
sortir le curseur du composant pour que le container le restore; un des
nombreux bugs de AWT.

la solution basée sur un MouseMotionListener est pertinente.

Sylvain.

TestMan
Le #219570
C'est un simple TextArea dans une Frame.
Dans Windows XP.
Quand on tape du texte le curseur de la souris disparait.
Il faut cliquer ou sortir et revenir dans la zone de texte pour qu'il
réapparaisse.

Exemple :

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class Test extends Frame{

public static void main (String args[]) {
Test test = new Test();
test.setBounds(200, 200, 200, 200);
test.setVisible(true);
}

public Test () {
super ("Test");
TextArea txta = new TextArea();
this.add("Center", txta);
this.addWindowListener(new WindowAdapter(){
public void windowClosing (WindowEvent e) {
System.exit(0);
}
});
}
}

Merci de vous intéresser à ce problème.
jfa


Bonjour,

Dans votre exemple, vous utilisez AWT donc des composants natifs du
système (en l'occurence les composants natifs de XP). Or ce comportement
semble être une comportement classique de windows. Essayez notepad,
wordpad ... même combat ;-)

C'est vraisemblablement fait pour permettre à l'utilisateur de voir ce
qu'il vient de saisir sans que le curseur le cache.

Si vous voulez ne pas dépendre du comportement de la plateforme il faut
utiliser les Swing à la place des AWT.

import javax.swing.*;
import java.awt.event.*;

public class Test2 extends JFrame{
public static void main (String args[]) {
try {
// Force le LaF a utiliser

UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());

//UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception ex) {
// Si un problème se présente rester avec les paramètres par défaut
}
Test2 test = new Test2();
test.setBounds(200, 200, 200, 200);
test.setVisible(true);
}

public Test2 () {
super ("Test2");
JTextArea txta = new JTextArea();
JScrollPane pane = new JScrollPane(txta);
this.add("Center", pane);
this.addWindowListener(new WindowAdapter(){
public void windowClosing (WindowEvent e) {
System.exit(0);
}
});
}
}

A noter au passage que si vous activez le SystemLookAndFeel dans le code
à la place du LaF multiplateforme, le comportement sera également celui
que vous recherchez également avec une apparence et un comportement plus
conforme à la plateforme (ici XP). Tout simplement, car Swing simule le
commportement et le LaF XP n'a pas jugé utile de reproduire ce point
dans le comportement.

A+
TM

Publicité
Poster une réponse
Anonyme