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
上进行了很好的调用。我不知道它的存在。我使用了两种答案的组合来修复它。谢谢。我使用了两种答案的组合来修复它。