【问题标题】:JScrollPane with transparent background and content具有透明背景和内容的 JScrollPane
【发布时间】:2013-03-03 14:29:23
【问题描述】:

在我的应用程序中,我会显示一个弹出对话框以显示大量卡片。我在JPanel 子类中的许多JLabel 组件中将它们显示为图像。然后我将该对象放在JScrollPane 中,以允许水平滚动卡片。

我希望未使用的空间是透明的,带有深色背景,以显示其背后的内容已被禁用。我用setBackground(new Color(50, 50, 50, 200))实现了我想要的样子,但是后面的内容并没有重绘,所以我得到了神器。

它是这样的:

我将如何解决这个问题?滚动时如何让其背后的内容重绘?

提前致谢。

【问题讨论】:

    标签: java swing transparency paint


    【解决方案1】:

    尝试以下操作...可能会让您在滚动时有所缓解。 当主框架最大化时,您可能也会遇到问题 或恢复。您将需要一个监听器来监听这些事件和一个 类似的修复。

        jScrollPane.getVerticalScrollBar().addAdjustmentListener(new AdjustmentListener() {
            @Override
            public void adjustmentValueChanged(final AdjustmentEvent e) {
                sevenWondersframe.repaint();
            }
        });
        jScrollPane.getHorizontalScrollBar().addAdjustmentListener(new AdjustmentListener() {
            @Override
            public void adjustmentValueChanged(final AdjustmentEvent e) {
                sevenWondersframe.repaint();
            }
        });
    

    【讨论】:

    • 谢谢。我使用了两个答案的组合来修复它。
    【解决方案2】:

    暂时把窗口排除在外。

    JScrollPane 包含一个 JViewport,然后包含您的内容。因此,您需要将内容窗格设置为透明,将视口设置为透明,然后将滚动窗格设置为透明。

    您可以通过在每个容器上使用setOpaque(false) 来实现此目的。

    这将确保重绘管理器现在将通过背景进行绘制。

    下一个问题是,Swing 实际上并不支持“半透明”组件(也就是说,它要么是不透明的,要么是透明的)。

    您可以通过覆盖主要组件的paintComponent 方法来实现这一点(视口上的那个可能就足够了)

    【讨论】:

    • 请致电JViewport。不知道存在。我使用了两个答案的组合来修复它。
    猜你喜欢
    • 2012-07-27
    • 1970-01-01
    • 2017-03-22
    • 2017-02-21
    • 2020-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多