【问题标题】:Setting background image and greyed GlassPane in Java (Swing)在 Java (Swing) 中设置背景图像和灰色 GlassPane
【发布时间】:2013-02-18 20:50:03
【问题描述】:

我目前正在为两个 Java GUI 问题苦苦挣扎。

情况是这样的:我正在使用 Swing 组件设计一个文字游戏。我有一个放置所有东西的主 JFrame(我的 GUI 类扩展了 JFrame)。我想做两件事:

第一个:我想设置一个图像作为主框架的背景图像,它必须显示在所有组件的后面。我四处寻找,但没有找到可行的解决方案。我尝试制作一个扩展的 BackGroundPanel 类,但是当我创建 BackGroundPanel 的一个实例时,我不知道如何使它成为框架的背景......我也没有找到从“图像”加载图像的好方法我的 src 文件夹中的目录...

第二次:当程序启动时,用户会看到一个未修饰的 JDialog,需要禁用主框架,这是我想出来的,但我也想让它变暗一点。我相信 GlassPane 应该可以,但我不知道如何设置 GlassPane 以用一种颜色覆盖面板......

非常感谢您的帮助,我认为我没有任何有用的代码可以分享,但我认为上面解释的情况给出了一个大致的想法?我只是希望有人能让我走上正轨,这样我就可以进一步解决这个问题!谢谢!

【问题讨论】:

    标签: java image swing glasspane


    【解决方案1】:

    我的主类扩展了JFrame,它有一个BorderLayout

    将您的 BorderLayout 添加到 JPanel 中,例如GridLayout().

    1. 这个AnimationTest 说明了在组件后面绘制背景图像。

    2. 这个Translucent 示例说明了使用AlphaComposite;另见AlphaTest

    【讨论】:

    • 首先谢谢,但我还是不明白怎么做,因为添加到 gridlayout 只会创建新的单元格,对吗?您可以在一个网格布局单元格中添加一个面板并在其顶部添加一个主面板吗?
    • 不,GridLayout() 会创建一个行为类似于 BorderLayout.CENTER 的单个单元格。
    • 另外,不要扩展JFrame;扩展JPanelJComponent 并覆盖paintComponent()
    • 所以我可以将图像添加到 GridLayout() 然后添加 mainPanel 和所有组件?从源文件中的目录中读取图像的好方法是什么,因为我从来没有成功过,但图标没问题...
    • 你必须进行实验才能得到你想要的效果;查看有关资源的答案here
    【解决方案2】:

    对于你的第一个问题,你可以使用标签并设置它的图标:

    JLabel lblimage = new JLabel("");
    
    lblimage.setIcon(new ImageIcon(Main.class.getResource("/img/background.png")));
    lblimage.setBounds(0, 0, 794, 711); //size of frame
    
    contentPane.add(lblimage); //bottom
    contentPane.add(component1); //middle low
    contentPane.add(component2); //middle top
    contentPane.add(component3); //top
    

    至于您的第二个问题.. 您可能会做同样的事情,只需使用纯色图像并降低透明度,然后放置在其他组件之上(虽然不确定此解决方案)。

    【讨论】:

    • 嗯,但我的主机上已经有其他面板和组件,我怎么能把 JLabel 放在它们后面?
    • @E.五、d。 B. 为了尽快获得更好的帮助,请发布SSCCE,简短,可运行,可编译,只是您问题中的说明,否则这里的一切都是黑暗的镜头
    • 我编辑了答案以显示如何。您可以将 contentPane 替换为您添加所有组件的任何内容。
    • @ck1221 是的,但是我的 Main 类扩展了 JFrame 并且它有一个 BorderLayout,但是每个段(NORTH,EAST,SOUTH,WEST,CENTER)只能包含一个组件(面板)对吗?如何在其他所有内容后面显示完整图像?我认为这不适用于 .add(image) 还是会?
    猜你喜欢
    • 2021-08-07
    • 2023-03-04
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    • 2014-12-31
    相关资源
    最近更新 更多