我把一个jtextarea放在一个jpanel里。这个jpanel在背景上有一张图片,jtextarea是半透明的(半透明的红色)来显示背景。我不希望用户能够编辑或选择文本,我希望它只是作为一个jlabel(但有多行,易于换行和调整屏幕大小)。
我尝试了所有这些选择:
text.setEditable(false);
text.setFocusable(false);
text.setEnabled(false);
text.setHighlighter(null);
但是,当用户将鼠标拖动到jtextarea上时,仍然会发生一些颜色变化。有人知道发生了什么吗?
1条答案
按热度按时间thtygnil1#
您不能简单地将组件的背景色设置为“透明”并期望swing处理它。您需要将组件标记为透明(
setOpaque(false)
),只有这样swing的重绘管理器才会知道它必须更新它下面的组件。这就引出了如何绘制背景的问题(因为swing只有完全不透明或完全透明的概念)。
为此,您需要提供自己的绘制例程(覆盖
paintComponent
,填充背景,更新组件)…这就是rob camick的解决方案所做的,它只是为您提供了一个很好的 Package 器组件。。。下面是一个使用
JLabel
使用html Package 的文本和JTextArea
,都更新为支持“半透明”。。。使用
JLabel
使用
JTextArea
现在,使用rob的wrapper类将更容易实现,但是这为您提供了出错的地方以及需要做什么来修复它的想法。