2013-03-04 216 views
1

我正在为两个Java GUI而烦恼。在Java中设置背景图像和灰色GlassPane(Swing)

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

1st:我想设置一个图像作为主框架的背景图像,它必须显示在所有组件后面。我已经四处搜寻,但还没有找到工作解决方案。我试着做一个扩展的BackGroundPanel类,但是当我创建一个BackGroundPanel的实例时,我不知道如何使它成为框架的背景......我也没有找到一个好方法来从一个'图像'目录在我src文件夹...

第二:程序启动时用户正在迎接一个未修饰的JDialog,主框架需要被停用的,这我想通了,但我也想使它有点黑。我相信应该可以使用GlassPane,但我不知道如何将GlassPane设置为使用一种颜色覆盖面板...

帮助将不胜感激,我不认为我有任何有用的代码分享,但我认为上面解释的情况给出了一个总体思路?我只想让某人让我走上正轨,这样我就可以继续工作了!谢谢!

回答

0

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

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 

为你的第二个问题..你可能做同样的事情,只是使用的图像与纯色并降低透明度,并放置在其他组件上(不确定此解决方案)。

+0

嗯,但我已经在我的主机上有其他面板和组件,我怎么能把JLabel放在它们后面呢? – 2013-03-04 17:41:31

+0

@E。 V. d。 B.为了更好的帮助,请尽快发布[SSCCE](http://sscce.org/),简短,可运行,可编辑,仅仅是关于你的问题的描述,否则这里的一切都是黑暗的镜头 – mKorbel 2013-03-04 17:51:16

+0

我编辑答案演示如何。您可以将contentPane替换为将所有组件添加到的任何内容。 – ck1221 2013-03-04 17:51:36

2

我的主类延伸JFrame它有一个BorderLayout

将你的BorderLayout加到一个JPanel上, GridLayout()

  1. AnimationTest说明绘制组件后面的背景图像。

  2. Translucent示例说明了使用AlphaComposite;另请参阅此AlphaTest

+0

首先谢谢,但我仍然不知道该怎么做,因为添加到gridlayout只会创建新的单元格?你可以添加一个面板,并在一个网格布局单元的主面板之上? – 2013-03-04 18:34:49

+0

不,'GridLayout()'创建一个行为与'BorderLayout.CENTER'非常相似的单元。 – trashgod 2013-03-04 18:36:39

+0

另外,不要扩展'JFrame';扩展'JPanel'或'JComponent'并覆盖'paintComponent()'。 – trashgod 2013-03-04 18:39:19