2009-05-22 2 views
0

Как установить цвет текста в текстовом поле Java Swing во время выполнения? При запуске цвет серого цвета, и когда пользователь вводит текстовое поле, я хочу изменить цвет на обычный цвет текста. В настоящее время я использую следующий код:Установить цвет текста в текстовом поле 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); 
     } 
    } 

В это время, когда код работает, текст по-прежнему отображается серым цветом.

Дополнительный код:
декларация (как поле):

private javax.swing.JTextPane txtScheduleInfo; 

Инстанцирование:

txtScheduleInfo = new javax.swing.JTextPane(); 

Initialization:

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

Можете ли вы опубликовать более полный пример? – willcodejavaforfood

+0

Я сделал это. –

+0

Вы проверили, что ваши условия на самом деле верны во время выполнения с помощью отладчика? –

ответ

1

попробовать это вместо

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); 
     } 
    } 

(Единственное изменение поменяв порядок. Теперь вы устанавливаете цвет переднего плана перед очисткой текст.)

2

ли вы убедитесь, что JTextBox включен? Вы можете позвонить по телефону setEnabled(true), чтобы убедиться. Не пытаясь быть грубым, это всего лишь самая вероятная причина (в Swing есть код для принудительного вытеснения отключенных компонентов).

Если это не исправить, вы также можете вызвать перерисовку, вызвав txtScheduleInfo.repaint(), что может привести к ее перерисовке.

Если ни одна из этих вещей не помогает, вы можете опубликовать код, чтобы мы могли видеть, что происходит.

+0

К сожалению, ни одно из этих решений не устранило проблему. Я добавил дополнительный код. –

0

Не работает ли качание нормально (изменение цвета, когда текстовое поле получает фокус для редактирования)? Попробуйте отключить весь код изменения цвета и посмотреть, работает ли он нормально. Если вы хотите опубликовать свой код в компиляционной форме на PasteBin, другие могут действительно выполнить полную отладку.

Другие вещи я могу предложить:

  • Убедитесь, что java.awt.SystemColor.textText действительно цвет вы хотите (использовать методы на нем, чтобы получить шестнадцатеричный цвет, а затем отобразить его в цветовую палитру)
  • Удалите строку txtScheduleInfo.setForeground(java.awt.SystemColor.textInactiveText);, так как она может как-то переопределить по умолчанию, если ваш обработчик фокуса сломан.
  • Заменить
    if (currentClassIsNewClass() && txtScheduleInfo.getDocument().getText(0, txtScheduleInfo.getDocument().getLength()).equals(PASTE_SI_HERE))
    Сif(true)

Ваше внимание слушателя событий никогда не может быть запуск для изменения цвета из-за состояния в том, что если заявление. Кроме того, вы знаете, что фокус был получен в любом случае при вызове этого метода.