【问题标题】:Transparent UI (+UIManager) artifacts透明 UI (+UIManager) 工件
【发布时间】:2012-06-01 11:12:42
【问题描述】:

我有一个在panel 上绘制background image 的应用程序,但为了获得最佳用户界面,我需要设置Component 背景Transparent

我使用 UI 管理器使每个组件都透明: uimanager.put(Button, background(new color(0, 0, 0, 0);

onMouseOver component 重绘自身(我猜)并导致工件.. 我怎样才能在UIManager 中避免这种情况?

(我创建了一个类:uidefaults.java 与所有 UIManager 设置)

提前致谢!!

【问题讨论】:

  • 为了获得更好的帮助,请尽快发布 SSCCE 证明您与 TransparencyUIManager 的问题,否则您必须等待一些通灵者会为您提供正确答案
  • 好的,我到家就做这个,我现在在上班
  • 另外,工件的屏幕截图可能会有所帮助。

标签: java swing transparent uimanager uidefaults


【解决方案1】:

嗯,这很简单 - 不要对不透明的组件(确切地说是任何 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 ) );

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

【讨论】:

  • 就这么简单吗?我到家后一个小时左右通知你!谢谢
  • 是的,就是这么简单。顺便说一句 - 不要使用 UIManager 除非你想全局更改任何属性(它们会影响特定类型的所有组件)。例如,在您的代码中,在您设置“Button.background”后创建/更新的所有按钮都将使用该背景。如果您想修改单个按钮实例 - 请改为调用其方法(在本例中为 setBackground)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-26
  • 1970-01-01
  • 1970-01-01
  • 2016-02-15
相关资源
最近更新 更多