【问题标题】:Transparent JPanel in JLayeredPaneJLayeredPane 中的透明 JPanel
【发布时间】:2012-07-07 10:26:13
【问题描述】:

我看过几个类似的问题,但不幸的是,其中包含的建议对我来说并没有完全做到。

总体目标:我有一个滑块,我想在一个主要显示可视化的窗口的左上角显示(这里是“显示”)。滑块应覆盖在没有任何背景的可视化顶部。

到目前为止,我有一个 JPanel,在 JLayeredPane 的可视化上方的图层上包含我的滑块。问题是,尽管调用了 setOpaque 和/或 setBackground(new Color(0,0,0,0)),但 JPanel 的背景(包括滑块)显示为灰色。我正在使用 Nimbus LAF。

最初,我使用了 Absolute Layout,它以非常优雅的方式完成了几乎所有事情,并且代码最少。那里的问题是可视化没有随窗口自动调整大小(但如果有一种干净的方法可以使可视化随窗口调整大小,我愿意接受这种方法)。

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

非常感谢!

【问题讨论】:

    标签: java swing transparency jpanel jlayeredpane


    【解决方案1】:

    渲染滑块是组件的 UI 委托的职责,通常是 BasicSliderUI 的子类。如果需要,您可以替换自己的实现,如 here 所示。

    【讨论】:

    • 这是一个合理的答案,所以我会接受它。我发现了我的问题的一些原因并选择了一种不同的方法,但是:问题在于将框布局分配给 JLayeredPane 会将整个窗格设置为该布局的一个实例,而不是每层一个布局(因为我希望),所以窗格上有一个背景的原因是因为那里根本没有任何东西。我选择使用 AbsoluteLayout 定位和覆盖 componentResized 来调整需要随窗口调整大小的组件。
    • 谢谢,但如果它可能对未来的读者有所帮助,请不要犹豫添加补充答案。我一直对跨平台 UI 陷阱感兴趣。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-20
    • 1970-01-01
    • 2017-06-14
    • 2013-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多