JScrollPane具有透明的背景和内容

时间:2013-03-15 00:48:36

标签: java swing transparency paint

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

我希望未使用的空间在深色背景下透明,以显示它背后的内容被禁用。我使用setBackground(new Color(50, 50, 50, 200))来实现我想要的外观,但它背后的内容不会重绘,所以我得到了瑕疵。

这是它的样子:

Artifacting when scrolling

我该如何解决这个问题?滚动时如何获取其背后的内容?

提前致谢。

2 个答案:

答案 0 :(得分:6)

将窗口排除在等式之外。

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

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

这将确保重绘管理器现在将在后台绘制。

下一个问题是,Swing实际上并不支持“半透明”组件(即,它是不透明的或透明的)。

您可以通过覆盖主要组件的paintComponent方法(视口上的方法可能已足够)来实现此目的。

答案 1 :(得分: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();
        }
    });