5

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

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

这是它的样子:

滚动时出现伪影

我将如何解决这个问题?当我滚动时,如何让它后面的内容重绘?

提前致谢。

4

2 回答 2

6

暂时将窗口排除在等式之外。

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

您可以通过setOpaque(false)在每个容器上使用来实现这一点。

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

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

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

于 2013-03-15T01:06:27.483 回答
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();
        }
    });
于 2013-03-15T01:54:57.847 回答