Имеется JTextPane, в ней форматированный разноцветный текст.
Если JTextPane задизаблить, то текст становится серого цвета. Каким образом можно заставить JTextPane и в disabled состоянии отображать цветной текст?
Может кому будет пригодится:
Изначально пришла идея как-то перегрузить/изменить логику отображения задизабленного текста в UI манагере. Начал с WindowsTextPaneUI-BasicTextPaneUI-BasicEditorPaneUI-BasicTextUI, вышел на ParagraphView, а из него на GlyphView. Фиг там, логика отображения гвоздями прибита. Может как-то и можно было через Highlighter перерисовать текст, но дальше разбираться не стал.
Пришла мысль поколдовать с MouseListerer'ами в том же BasicTextUI. В общем, подобная ситуация, если не вдаваться в детали.
По итогу, написал все в несколько строчек, как изначально проскакивала мысль:
private class InnerTextPane extends JTextPane {
private BufferedImage m_img;
public void setEnabled(boolean b){
if( this.isEnabled() && !b && 0<this.getWidth() && 0<this.getHeight() ){
m_img = new BufferedImage(this.getWidth(), this.getHeight(), BufferedImage.TYPE_INT_ARGB);
Graphics2D g2 = m_img.createGraphics();
this.paint(g2);
}
else
m_img = null;
super.setEnabled(b);
}
public void paint(Graphics g) {
if( !this.isEnabled() && m_img!=null )
g.drawImage(m_img, 0, 0, null);
else
super.paint(g);
}
}