2009-05-22 11 views
0

Comment définir la couleur du texte dans une zone de texte Java Swing lors de l'exécution? Au démarrage, la couleur est grisâtre et lorsque l'utilisateur entre dans la zone de texte, je souhaite changer la couleur à la couleur du texte normal. J'utilise actuellement le code suivant:Définition de la couleur du texte dans une zone de texte Java

private void txtScheduleInfoFocusGained(java.awt.event.FocusEvent evt)            
    {             
     try 
     { 
      if (currentClassIsNewClass() && txtScheduleInfo.getDocument().getText(0, txtScheduleInfo.getDocument().getLength()).equals(PASTE_SI_HERE)) 
      { 
       txtScheduleInfo.setText(""); 
       txtScheduleInfo.setForeground(java.awt.SystemColor.textText); 
      } 
     } 
     catch (BadLocationException ex) 
     { 
      JOptionPane.showMessageDialog(this, "BLE\nContact Zian", "Unexpected Problem", JOptionPane.ERROR_MESSAGE); 
     } 
    } 

À ce moment, lorsque le code s'exécute, le texte apparaît toujours en gris.

Code additionnel:
Déclaration (comme un champ):

private javax.swing.JTextPane txtScheduleInfo; 

instanciation:

txtScheduleInfo = new javax.swing.JTextPane(); 

Initialisation:

txtScheduleInfo.setForeground(java.awt.SystemColor.textInactiveText); 
txtScheduleInfo.setText("Paste schedule information here"); 
txtScheduleInfo.addFocusListener(new java.awt.event.FocusAdapter() { 
    public void focusGained(java.awt.event.FocusEvent evt) { 
     txtScheduleInfoFocusGained(evt); 
    } 
    public void focusLost(java.awt.event.FocusEvent evt) { 
     txtScheduleInfoFocusLost(evt); 
    } 
}); 
+0

Pouvez-vous poster un exemple plus complet? – willcodejavaforfood

+0

J'ai fait ça. –

+0

Avez-vous vérifié que vos conditions sont vraies à l'exécution avec un débogueur? –

Répondre

1

essayer cette place

private void txtScheduleInfoFocusGained(java.awt.event.FocusEvent evt)            
    {             
     try 
     { 
      if (currentClassIsNewClass() && txtScheduleInfo.getDocument().getText(0, txtScheduleInfo.getDocument().getLength()).equals(PASTE_SI_HERE)) 
      { 
       txtScheduleInfo.setForeground(java.awt.SystemColor.textText); 
       txtScheduleInfo.setText(""); 
      } 
     } 
     catch (BadLocationException ex) 
     { 
      JOptionPane.showMessageDialog(this, "BLE\nContact Zian", "Unexpected Problem", JOptionPane.ERROR_MESSAGE); 
     } 
    } 

(Le seul changement est swapping l'ordre. Maintenant, vous réglez la couleur de premier plan avant d'effacer le texte.)

2

Avez-vous fait que le JTextBox est activé? Vous pouvez appeler le setEnabled(true) pour être sûr. Ne pas essayer d'être impoli, c'est juste la cause la plus probable (il y a du code dans Swing pour forcer le grisonnement des composants désactivés). Si cela ne résout pas le problème, vous pouvez également déclencher un repaint en appelant txtScheduleInfo.repaint(), ce qui peut entraîner sa réapparition.

Si aucune de ces choses ne vous aide, vous pouvez poster du code afin que nous puissions voir ce qui se passe.

+0

Malheureusement, aucune de ces solutions n'a résolu le problème. J'ai posté du code supplémentaire. –

0

Est-ce que Swing n'effectue normalement pas ce comportement (changement de couleur lorsque la zone de texte est mise au point pour l'édition)? Essayez de désactiver tout votre code de changement de couleur et voyez si cela fonctionne normalement. Si vous souhaitez publier votre code sous une forme compilable sur PasteBin, d'autres utilisateurs peuvent également effectuer un débogage complet.

Autres choses que je peux suggérer:

  • Vérifiez que java.awt.SystemColor.textText est vraiment la couleur que vous voulez (méthodes d'utilisation sur elle pour obtenir la couleur hexadécimal puis l'afficher dans un sélecteur de couleur)
  • Supprimez la ligne txtScheduleInfo.setForeground(java.awt.SystemColor.textInactiveText); car elle risque en quelque sorte de remplacer la peinture par défaut si votre gestionnaire de focus est brisé.
  • Remplacer
    if (currentClassIsNewClass() && txtScheduleInfo.getDocument().getText(0, txtScheduleInfo.getDocument().getLength()).equals(PASTE_SI_HERE))
    AVECif(true)

Votre écouteur d'événement de mise au point ne peut jamais être le déclenchement pour changer les couleurs en raison d'une condition que si la déclaration. En outre, vous savez que l'attention a été acquise de toute façon lorsque cette méthode est appelée.

Questions connexes