java - 透明 UI (+UIManager) 工件

标签 java swing transparent uimanager uidefaults

我有一个在面板上绘制背景图像的应用程序,但为了实现最佳UI,我需要设置Component > 背景透明:

我使用 UI 管理器使每个组件透明: uimanager.put(Button, background(new color(0, 0, 0, 0); <- 类似的东西,这很完美,除了..

onMouseOver component 重绘自身(我猜)并导致 Artifacts.. 如何在 UIManager 中避免这种情况?

(我创建了一个类:uidefaults.java,其中包含所有 UIManager 设置)

提前致谢!!

最佳答案

嗯,这非常简单 - 不要对不透明的组件(确切地说是任何 JComponent 祖先)使用透明背景色。

要删除组件背景,您不需要设置透明颜色 - 只需使用此方法:

component.setOpaque ( false );

这将隐藏组件背景,并且还将更改组件重绘策略,因此它不会在重绘调用时创建任何工件。

此外,如果您仍然希望组件后面有半透明背景,您可以重写 PaintComponent 方法,如下所示:

    JLabel label = new JLabel ( "Transparent background" )
    {
        protected void paintComponent ( Graphics g )
        {
            g.setColor ( getBackground () );
            g.fillRect ( 0, 0, getWidth (), getHeight () );
            super.paintComponent ( g );
        }
    };
    label.setOpaque ( false );
    label.setBackground ( new Color ( 255, 0, 0, 128 ) );

这将强制标签隐藏其默认背景并绘制您自己的背景(这取决于组件的背景属性)。

关于java - 透明 UI (+UIManager) 工件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10849183/

相关文章:

java - 出现错误: No enclosing instance of type **** is accessible

Java:JScrollPane JLabel 太靠近边缘

java - 根据文本大小自动调整 JTable 列的大小

Java Swing透明JPanels问题

java - 透明 PNG 在 Canvas Java 中显示黑色背景

actionscript-3 - 使用 AS3 检查 PNG 图像是否包含(半)透明像素

java - 为什么 String::isEmpty 在无法从静态上下文中引用非静态方法时起作用?

java数据结构替代文件io

Java通过tcp套接字有效地发送floatbuffer

java - 如何在添加新行后自动对 JTable 进行排序?