在我的应用程序中,我会显示一个弹出对话框,显示大量的卡片。我将它们显示为JLabel
子类中许多JPanel
个组件中的图像。然后我将该对象放在JScrollPane
中以允许水平滚动卡片。
我希望未使用的空间在深色背景下透明,以显示它背后的内容被禁用。我使用setBackground(new Color(50, 50, 50, 200))
来实现我想要的外观,但它背后的内容不会重绘,所以我得到了瑕疵。
这是它的样子:
我该如何解决这个问题?滚动时如何获取其背后的内容?
提前致谢。
答案 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();
}
});