【问题标题】:Create a transparent scroll pane in java Swing在 java Swing 中创建一个透明的滚动窗格
【发布时间】:2020-07-08 16:28:26
【问题描述】:

是否可以使JScrollPane 完全透明,以便显示其下方的内容,但保持我需要滚动的列表元素完全不变?

【问题讨论】:

  • 您只想切换面板本身的可见性吗?那是panelName.setVisible(false)?
  • 如果我这样做,它上面的组件将与面板一起变得不可见,但我希望它们留下来。
  • (1-) 滚动窗格应该是透明的。您知道该怎么做吗? - 是的,但您尚未使用“MRE”和有关该问题的所有相关信息更新您的问题。我们不需要阅读所有的 cmets 来找出真正的需求。上述问题已得到解答。
  • 是的,你是对的,我编辑了这个问题,我会尽快提供一个例子

标签: java swing jpanel paint transparent


【解决方案1】:

是否可以覆盖 JPanel 的绘制方法以使其完全透明以显示其下方的内容

不要覆盖paint()。

您只需使用:

panel.setOpaque( false );

使面板透明。

所有添加到面板的组件都会根据布局管理器的规则正常显示。

【讨论】:

    【解决方案2】:

    是的,这是可能的,但不是通过覆盖 paint() 方法,覆盖它永远不是一个好主意,可能是 paintComponent(),但仍然有更简单的方法来做到这一点。

    1. 创建JFrame
    2. 创建一个JPanel 作为背景
    3. 创建一个JPanel,它将作为顶部窗格
    4. bgPane 的背景设置为某种颜色
    5. topPane 的背景设置为其他颜色(可选) - 只是为了让您看看第 7 步会发生什么
    6. JLabel 添加到topPane
    7. setOpaque(false)topPane
    8. 瞧!您应该能够通过其他窗格看到

    如果我尝试 setOpaque(false) 顶部面板和包裹它的 JScrollPane,我看到的都是灰色,背景被这个灰色覆盖。

    为此,您所要做的就是:

    scroll.getViewport().setOpaque(false);
    

    【讨论】:

    • 是的,这就是@camickr 的建议,它在许多情况下都可以正常工作,但不适用于 JScrollPane。如果我尝试setOpaque(false) 顶部面板和JScrollPane 包裹它,我看到的都是灰色,背景被这个灰色覆盖。对不起,我应该更具体。我的目标是在查看背景时滚动一系列薄的自定义 JPanel,因此滚动窗格应该是透明的。你知道怎么做吗?
    • 那么请将这些详细信息添加到您的问题中,并在minimal reproducible example 中说明您尝试过的方法以及为什么没有奏效
    • @reaper_ 在 JScrollPane 上使用 setOpaque(false) 怎么样
    • @Frakcool 感谢您的回答,不幸的是,在视口上使用 setOpaque(false) 仍然无法正常工作。如果我能设法以可理解的方式重新创建它,我将尝试提供一个具体的例子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 2022-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多