Как переопределить метод JTextArea isEnabled () - PullRequest
0 голосов
/ 02 августа 2010

Я хочу переопределить метод isEnabled () в java.awt.Component и использовать его с JTextArea.

Это то, что я делаю.

Этот фрагмент кода вызывается внутри конструктора Jframe.

jTextArea1 = new javax.swing.JTextArea(){
        @Override
        public boolean isEnabled(){
            if(getForeground()== new Color(0, 0, 0)){
                return true;
            }
            return false;
        }

    };

А когда щелкнуть мышью на jTextArea1, вызывается следующая функция.

private void jTextArea1MouseClicked(java.awt.event.MouseEvent evt) {
    if (jTextArea1.isEnabled()) {
        jTextArea1.setForeground(Color.GRAY);
        jTextArea1.revalidate();
        System.out.println("gray");
    } else {
        jTextArea1.setForeground(Color.BLACK);
        jTextArea1.revalidate();
        System.out.println("black");
    }
}

Я использую IDE NetBeans, поэтому автоматически генерируются списки действий.

Причина, по которой я это делаю, заключается в том, что я хочу изменить курсор мыши, когда он находится над jTextArea1. Если бы я просто использовал метод setEnabled (), курсор не изменится, когда jTextArea1 находится в состоянии «не включено». Таким образом, этот путь будет все время оставлять jTextArea1 в состоянии «включено», но при нажатии мыши на нем будет визуально отображаться включение и отключение. И если вызывается функция isEnabled (), она будет делать вид, что состояние включения изменяется при щелчке мыши.

Моя проблема в том, что он не дает ожидаемого результата. Я изначально установил цвет текста переднего плана не черный (серый). При щелчке мышью цвет не меняется на черный. И это печатает "черный".

1 Ответ

1 голос
/ 02 августа 2010
getForeground() == new Color(0, 0, 0)

Нет способа, которым getForeground() будет возвращать точно такой же объект, который вы недавно создали для rhs.

Как правило, нет необходимости переопределять методдаже подкласс текстового компонента.Сохраняйте состояние где-нибудь еще.

(Также jTextArea1 не очень хорошее имя.)

...