Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 具有透明背景和内容的JScrollPane_Java_Swing_Transparency_Paint - Fatal编程技术网

Java 具有透明背景和内容的JScrollPane

Java 具有透明背景和内容的JScrollPane,java,swing,transparency,paint,Java,Swing,Transparency,Paint,在我的应用程序中,我会显示一个弹出对话框来显示一个大的卡片列表。我在JPanel子类中的许多JLabel组件中将它们显示为图像。然后,我将该对象放入JScrollPane中,以允许水平滚动卡片 我希望未使用的空间是透明的,有一个黑色的背景,以显示它背后的东西是禁用的。我使用了setBackground(新颜色(50,50,50,200))来实现我想要的外观,但是它背后的内容没有重新绘制,所以我得到了人工制品 下面是它的样子: 我该如何着手解决这个问题?当我滚动时,如何使其背后的内容重新绘制 提

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

我希望未使用的空间是透明的,有一个黑色的背景,以显示它背后的东西是禁用的。我使用了
setBackground(新颜色(50,50,50,200))
来实现我想要的外观,但是它背后的内容没有重新绘制,所以我得到了人工制品

下面是它的样子:

我该如何着手解决这个问题?当我滚动时,如何使其背后的内容重新绘制


提前感谢。

将窗口从动量方程中移除

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

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

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

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


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

尝试以下操作……可能会在滚动过程中减轻一些压力。 当主框架最大化时,您可能也会遇到问题 或者恢复。您将需要这些事件的侦听器和 类似的修正

    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();
        }
    });

JViewport
上进行了很好的调用。我不知道它的存在。我使用了两种答案的组合来修复它。谢谢。我使用了两种答案的组合来修复它。