I have a very similar problem, I don't care about the popup arrow, but I need to control the text appearance when the component is disabled.
I want to show the current value, but disable list selection/editing. The only way to get this behavior with JComboBox is to use comboBox.setEnabled(false); which makes the text an unreadable light grey.
I created a ComoBoxUIDecorator, and intercepted some of the paint methods. This has exactly the right effect -- the arrow appears greyed out while the current value appears in black and readable (as if enabled).
public class ComboBoxUIDecorator extends ComboBoxUI {
private ComboBoxUI m_parent;
public ComboBoxUIDecorator(ComboBoxUI x) {
m_parent = x;
}
...
public boolean isFocusTraversable(JComboBox c) {
return m_parent.isFocusTraversable(c);
}
public void paint(Graphics g, JComponent c) {
c.setEnabled(m_displayEnabledState);
m_parent.paint(g, c);
c.setEnabled(m_realEnabledState);
}
}
You might try a similar approach; If you could find the arrow button, you could paint over the arrow after invoking m_parent.paint()