java - 如何完全禁用 JTextPane 的文本突出显示?
问题描述
拜托,有人能告诉我如何禁用JTextPane
. MyJTextPane
是半透明的,因此是突出显示的越野车。但是没有突出显示是好的!
我尝试了以下方法:
DefaultHighlighter highlighter = (DefaultHighlighter) chatTextPane.getHighlighter();
highlighter.removeAllHighlights();
chatTextPane.setHighlighter(null);
chatTextPane.setSelectedTextColor(new Color(0,0,0,0));
chatTextPane.setSelectionColor(new Color(0,0,0,0));
chatTextPane.setSelectionStart(0);
chatTextPane.setSelectionEnd(0);
chatTextPane.setCaret(new NoTextSelectionCaret(chatTextPane));
// with:
private class NoTextSelectionCaret extends DefaultCaret
{
public NoTextSelectionCaret(JTextComponent textComponent)
{
setBlinkRate( textComponent.getCaret().getBlinkRate() );
textComponent.setHighlighter( null );
}
@Override
public int getMark()
{
return getDot();
}
}
还有一些highlighter.getDrawsLayeredHighlights();
我什至不记得的东西。
谢谢!
解决方案
由于 Swing 的工作方式,突出显示显示了一些不受欢迎的伪影,并且我将 JTextPane 包裹在另一个具有透明颜色的面板中。
消除工件,将 JTextPane 包装在AlphaContainer中。
public class AlphaContainer extends JComponent
{
private JComponent component;
public AlphaContainer(JComponent component)
{
this.component = component;
setLayout( new BorderLayout() );
setOpaque( false );
component.setOpaque( false );
add( component );
}
/**
* Paint the background using the background Color of the
* contained component
*/
@Override
public void paintComponent(Graphics g)
{
g.setColor( component.getBackground() );
g.fillRect(0, 0, getWidth(), getHeight());
}
}
然后:
AlphaContainer ac = new AlphaContainer(chatTextPane);
并将 AlphaContainer 添加到您的框架中。如果 AlphaContainer 要包含在另一个组件中,请将另一个组件设置为setOpaque(false);
。
然后您可以chatTextPane.setHighlighter(null);
根据需要设置禁用突出显示。
推荐阅读
- typescript - 为什么某些包的自动导入不起作用?
- java - 如何从java中的类对象列表中获取第一个匹配元素的索引(不使用任何第三方库)
- xsd - xml 模式:检查列表是否升序
- sql - 以与现有 id 字段相同的模式创建随机值
- javascript - 用两个组件反应 handleChange 错误
- c - 是否在有符号的固定宽度整数上定义和可移植按位运算?
- python - 在熊猫中添加一个带有当前年份的新列
- javascript - How can i overwrite data on HTML Datatables?
- python-3.x - 查找与嵌套字典中的值匹配的所有键,并以这些值作为键创建一个新字典
- firebase - 在 Xamarin.iOS 中为 Google 移动广告支持添加包会导致链接错误