Java Swing:在具有部分透明背景的JTextArea上更新文本时显示的Ghost文本

时间:2011-01-14 17:32:20

标签: java swing jtextarea alpha-transparency

所以这是交易:

我有一个JPanel和一个JTextArea。 JPanel的背景颜色的alpha值为200,即。你可以通过JPanel在paritally看到背景图像。这不是所谓的部分透明度吗?无论如何,然后我将JTextArea设置为非透明,以便我可以完全看透那个:

JPanel p = new JPanel();
p.setBackground(new Color(237, 234, 215, 200);
JTextArea jta = new JTextArea("Blahblahblahblah");
jta.setOpaque(false);
p.add(jta);

好的,所以当我点击按钮时,文本将会改变如下:

jta.setText("new BlahBlah...");

然后它发生了:第一个文字仍然留在那里,上面有一个新的部分透明的电影。我添加的文字当然是最重要的,但就在那里,你可以看到前一个一。当我将文本更改几次时,幽灵消失了。

The screenshot as a link.

翻译(截图连续3张):
左一:“问题#1,满分8分:(一个政治问题)?(我的评论:好的)“左中心:”8个问题#2 :(另一个问题,没关系)?(我的评论:幽灵是那里![和指出它的箭头])“
右手边:”8号问题#8 :(另一个问题)?(我的评论:好的)“

如果我减少了这个程序交换的问题数量,例如,从8到3,最后一个看起来通常很好,鬼魂消失了。但无论我做什么,有时它都会坚持下去。它可能与内存不足有关(尽管我几乎不能吞下它)?

所以,请帮帮我,伙计们!我已经在48小时内完成了截止日期。

PS。万一你想知道,那语言是芬兰语。我正在开展一个学校项目:这将是一台可以有多种应用的比较机器:例如,如果你有公开选举,媒体/媒体可以在网上使用这种机器来获得候选人对任何问题的意见,然后选民也可以输入他们的意见,机器会计算哪些候选人最能匹配选民的想法。看我的主页,即。项目博客(芬兰语),如果您有兴趣,可以获得更多截图。

an55i

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:0)

最后我让它出现了!就是这样:

  1. 容器(本例中为p)和组件(jta)都必须设置为setOpaque(false);
  2. 容器必须始终通过抓取内部组件的背景颜色来清除自身,实际上 - 它是内部组件从其祖先获得的颜色,即。容器本身。
  3. 我不是以某种方式正确吗?好吧,至少代码是诀窍。

    类字段:

    private JTextArea jta;
    private JPanel p;
    

    后来:

    jta = new JTextArea("BlahBlahBLAH");
    jta.setBackground(new Color(237, 234, 215, 200));
    p = new JPanel() {
        @Override
        protected void paintComponent(Graphics g) {
            if(getContentPane().isAncestorOf(jta)) {
                g.setColor(jta.getBackground());
                g.fillRect(0, 0, getWidth(), getHeight());
            }
        }
    };
    
    p.setOpaque(false);
    jta.setOpaque(false);
    p.add(ta);
    

    就是这样。在将“jta”添加到“p”之前,我甚至会添加一些边框和内容。什么是最酷的,我实际上已经学习了。感谢您的支持!