I want to override isEnabled() method in java.awt.Component and use it with a JTextArea.
This is what I do.
This code snippet is called inside the Jframe constructor.
jTextArea1 = new javax.swing.JTextArea(){
@Override
public boolean isEnabled(){
if(getForeground()== new Color(0, 0, 0)){
return true;
}
return false;
}
};
And when mouse is clicked on the jTextArea1 following function is called.
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");
}
}
I am using netbeans IDE so actionlisteners are auto generated.
The reason I’m doing this is, I want to change mouse cursor when it is over jTextArea1. If I simply used setEnabled() method cursor wont change when jTextArea1 is in “not enabled” state. So this way will leave jTextArea1 in the “enabled” state all the time but will give the visual appearance of being enabled and unabled when mouse is clicked on it. And if isEnabled() function is called it will pretend that enable state is changed when mouse is clicked.
My problem is it doesn’t give the output that I am expecting. I have initially set text foreground colour to non black(gray). When mouse is clicked colour isn’t changing to black. And it prints “black”.
There is no way
getForeground()is going to return exactly the same object as you have newly created on the rhs.Generally, there doesn’t seem any need to override a method or even subclass the text component. Keep the state somewhere else.
(Also
jTextArea1isn’t a great name.)