JLayeredPane中的透明JPanel

3
我看到了几个类似的问题,但不幸的是其中的建议并没有完全解决我的问题。
总体目标:我有一个滑块,我想在窗口的左上方显示,该窗口主要显示可视化内容(这里称为“display”)。滑块应该覆盖在可视化内容之上,没有任何背景。
到目前为止,我有一个包含滑块的JPanel,在JLayeredPane中的一个图层上覆盖在可视化内容上。问题是,尽管调用了setOpaque和/或setBackground(new Color(0,0,0,0)),包括滑块的JPanel的背景仍然是灰色的。我正在使用Nimbus LAF。
最初,我使用了绝对布局,它以极少量的代码实现了几乎所有功能。问题在于,可视化内容不会自动随窗口大小调整(但如果有一种清洁的方法可以使可视化内容随窗口大小调整,我也可以采用这种方法)。
JPanel sliderPane = new JPanel();
sliderPane.setLayout(new BoxLayout(sliderPane, BoxLayout.X_AXIS));
sliderPane.add(zoomSlider);
zoomSlider.setMaximumSize(new Dimension (60, 150));
sliderPane.add(Box.createHorizontalGlue());
sliderPane.setBackground(new Color(0,0,0,0));

JLayeredPane graphPane = new JLayeredPane();
graphPane.setPreferredSize(new Dimension(1000, 800));
graphPane.setLayout(new BoxLayout(graphPane, BoxLayout.Y_AXIS));
graphPane.add(sliderPane, new Integer(1));
graphPane.add(display, new Integer(0));
graphPane.setOpaque(false);

非常感谢!
1个回答

2

渲染滑块的责任属于组件的UI代理,通常是BasicSliderUI的子类。 如果需要,可以像这里所示一样替换自己的实现。

image


1
这是一个合理的答案,所以我会采用它。然而,我已经找到了一些问题的原因并选择了不同的方法:问题在于将BoxLayout分配给JLayeredPane会将整个窗格设置为该布局的一个实例,而不是每个层都有一个布局(正如我所希望的那样),因此窗格上有一个背景是因为根本没有东西在下面。我选择使用AbsoluteLayout定位并覆盖componentResized来调整需要随窗口调整大小的组件的大小。 - bcr
谢谢,但如果有助于未来的读者,请随时添加补充答案。我对跨平台UI的陷阱始终很感兴趣。 - trashgod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接