super.getForeground()
is returning disabled color in the next call because once you set it to disabled color it will propagate to super class also as shown below:
Here is code directly from JComponent
public void setForeground(Color fg) {
Color oldFg = getForeground();
super.setForeground(fg);
if ((oldFg != null) ? !oldFg.equals(fg) : ((fg != null) && !fg.equals(oldFg))) {
// foreground already bound in AWT1.2
repaint();
}
}
No need to override getForeground() method just call setForeground() method form setEnabled() method.
Store default foreground color somewhere before updating and use it in further calls.
Can you try this one
class MyPane extends JTextPane {
private static final long serialVersionUID = 1L;
private boolean m_enabled = true;
private Color defaultForegroundColor, disabledTextColor;
public MyPane() {
defaultForegroundColor = getForeground();
disabledTextColor = getDisabledTextColor();
}
public void setEnabled(boolean enabled) {
m_enabled = enabled;
if (m_enabled) {
setForeground(defaultForegroundColor);
} else {
setForeground(disabledTextColor);
}
}
@Override
public boolean isEnabled() {
return true;
}
}