【问题标题】:Does using setOpaque(false) impact painting performance on Swing JComponents?使用 setOpaque(false) 会影响 Swing JComponents 的绘制性能吗?
【发布时间】:2014-08-01 17:13:44
【问题描述】:

我的问题是 setOpaque(false) 的使用,我已经开始使用 JPanel 在 Swing 中布局 UI,是否会影响绘画性能,而不是保持一切不透明(其中 isOpaque() 返回 true)。

我对 Swing 如何渲染 UI 不是很熟悉,但我猜如果 JComponent 不是不透明的,那么渲染组件背后的内容会更难,然后在组件上简单地绘制不透明的背景。

【问题讨论】:

    标签: java swing jcomponent


    【解决方案1】:

    是的,它确实在绘画时增加了额外的工作,但我怀疑你不必担心。

    基本上,每当您重绘一个透明的组件时,您都需要沿着链向上找到一个不透明的父组件,然后先绘制该组件,然后再绘制子组件。

    所以底线是不要担心它。如果您有理由使用透明度,请使用它。如果你没有理由,那么你不应该使用它。

    您可能想查看Background With Transparency。它更详细地介绍了 opaque 属性的含义以及它如何影响绘画以及如果您使用透明背景将会遇到的问题。

    【讨论】:

    • 这基本上归结为我的懒惰,是在用作容器的 JPanel 上添加与它包含的容器相同的背景颜色,还是将所有容器设置为透明。很高兴知道我应该尽可能坚持不透明。
    • @SammyGuergachi or just set all containers as transparent.,我认为这没有什么大问题。只有当你有很多动画并且面板每秒重绘多次时,我才会担心。通常一次只重绘一个组件。也就是说,当您在文本字段中键入文本时,即使您的面板是透明的,也只有文本字段会重新绘制。
    • 好吧,在我的例子中,我有非常慢的计算机需要运行它的约束,以及更具体的约束,即我在 JScrollPane 中有数百个 JPanel,我希望尽可能保持一切顺利允许良好的滚动。我想在 JScrollPane 中滚动需要重新绘制子组件对吗?
    • @SammyGuergachi, I imagine scrolling in a JScrollPane needs to repaint children panels right? 不。再一次,在假设问题之前尝试一下。
    猜你喜欢
    • 2010-09-26
    • 1970-01-01
    • 2017-01-27
    • 1970-01-01
    • 2012-08-15
    • 1970-01-01
    • 2021-04-29
    • 2012-02-04
    • 2011-01-28
    相关资源
    最近更新 更多