繁体   English   中英

如何制作jTextArea透明背景

[英]How to make jTextArea Transparent background

我想制作一个透明的背景jTextArea。 我尝试setBackground(新颜色(0,0,0,0)); jTextField正在工作,jTextArea没有工作。

喜欢这个代码。

// Not working.. Just remains gray.
    jScrollPane1.setOpaque(false);
    jScrollPane1.setBackground(new Color(0,0,0,0));
    jTextArea1.setOpaque(false);
    jTextArea1.setBackground(new Color(0,0,0,0));

    // Working.. As it wants to be transparent.
    jTextField1.setOpaque(false);
    jTextField1.setBackground(new Color(0,0,0,0));

在此输入图像描述

我怎样才能在jTextArea透明背景?

感谢和问候。

JScrollPane是一个组合组件,它控制/包含一个JViewport ,它是执行绘图的组件。 见API:

要做的常见操作是设置主视口视图小于视口时使用的背景颜色,或者不是不透明的。 这可以通过scrollPane.getViewport()。setBackground()设置视口的背景颜色来实现。 设置视口颜色而不是滚动窗格的原因是默认情况下JViewport是不透明的,除其他外,它意味着它将使用其背景颜色完全填充其背景。 因此,当JScrollPane绘制其背景时,视口通常会绘制它。

因此,您还应该更改JViewport的不透明和颜色属性。 您可以使用jScrollPane1.getViewport()访问它。

以下对我有用。

JTextArea textArea = new JTextArea();
textArea.setOpaque(false);
textArea.setBackground(new Color(red, green, blue, alpha));

JScrollPane scrollPane = new JScrollPane(textArea);
scrollPane.getViewport().setOpaque(false);
scrollPane.setOpaque(false);

这个例子包括50%透明

JTextArea textArea = new JTextArea();
textArea.setOpaque(false);

JScrollPane scrollPane = new JScrollPane(textArea) {
    @Override
    protected void paintComponent(Graphics g) {
        try {
            Composite composite = ((Graphics2D)g).getComposite();

            ((Graphics2D)g).setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f));
            g.setColor(getBackground());
            g.fillRect(0, 0, getWidth(), getHeight());

            ((Graphics2D)g).setComposite(composite);
            paintChildren(g);
        }
        catch(IndexOutOfBoundsException e) {
            super.paintComponent(g);
        }
    }       
};

scrollPane.getViewport().setOpaque(false);
scrollPane.setOpaque(false);

编辑抱歉的bug。 这是工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM