Установите цвет текста в текстовом поле Java - PullRequest
0 голосов
/ 23 мая 2009

Как установить цвет текста в текстовом поле Java Swing во время выполнения? При запуске цвет является сероватым, и когда пользователь вводит текстовое поле, я хочу изменить цвет на обычный текстовый цвет. В настоящее время я использую следующий код:

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

Инициализация:

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

Ответы [ 3 ]

2 голосов
/ 23 мая 2009

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

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

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

1 голос
/ 25 мая 2009

попробуйте вместо этого

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

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

0 голосов
/ 24 мая 2009

Разве Swing обычно не выполняет такое поведение (изменение цвета, когда текстовое поле получает фокус для редактирования)? Попробуйте отключить весь свой код, меняющий цвет, и посмотрите, работает ли он нормально. Если вы готовы опубликовать свой код в скомпилированной форме на 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)

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

...