2012-08-08 77 views
2

因此,我一直在处理我的程序,并且无法使用网络地图的背景图像设置JFrame,然后使用MigLayout设置JPanel 在JFrame的顶部,这将允许我根据网络地图放置图像。我已经看到了关于如何设置背景图片的几种不同方法,并尝试使用我在本网站其他地方找到的示例,但它不太适用。另外,我对此进行了更多的研究,发现JFrame的JPanel ontop可能会阻止JFrame的背景图像被看到。我希望有人可以看看我的代码,并让我知道如果是这样的话。Java背景使用Jpanel将Jpanel排列在网格中的图像

这里是我的同班同学设置背景:

public class bwMonBackground extends JFrame { 
    Image img; 
    public bwMonBackground() { 
     try { 
      img = ImageIO.read(new File("/Users/pwopperer/workspace/BWmon/src/customer_vlans.jpg")); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 
public void paintComponent(Graphics g) 
{ 
    super.paintComponents(g); 
    g.drawImage(img, 0, 0, getWidth(), getHeight(), this); 
} 

} 

这里是我的主:

public class bwMonBackgroundMain { 

    public static void main(String[] args) 
     { 
      bwMonBackground frame = new bwMonBackground(); 
      frame.setLayout(new FlowLayout(FlowLayout.LEFT,10,20)); 
      migLayout testing = new migLayout(); 
      frame.add(testing.createLayout()); 
      frame.setVisible(true); 
      frame.setResizable(false); 
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      frame.pack(); 

     } 
} 

编辑:当我运行它这个样子,我只得到一个JPanel与6周的JLabel我加入它

回答

3

这是一个挑剔的小挑剔,但你应该总是打电话super.paintComponent,除非你有一个真正的,真正的好理由不。

此外,您应该尽可能提供Graphics.drawImage以及ImageObserver。基本上,这意味着如果图像处理发生在另一个线程,在ImageObserver不会变更通知和自动更新;)

public void paintComponent(Graphics g) 
{ 
    super.paintComponent(g); 
    g.drawImage(img, 0, 0, this); 
} 

当放置组件到您的地图,你需要确保它们透明(JComponent.setOpaque(false) )。这将允许背景显示。

很明显,您可以选择一些组件以使其更易于读取或提供半透明效果。

更多的想法

我不会以这种方式覆盖JFrame。框架具有内容窗格,它们负责核心内容。

此外,从存储器,JFrame不具有paintComponent方法:P

我反而重写JPanel(或JComponent)和用户那里paintComponent方法来代替,那么无论此面板添加到帧内容窗格或将它设置为内容窗格本身(frame.setContentPane(...) - 只是要小心,你在添加任何其他组件到框架之前这样做,因为这将有效地将它们从UI中删除;))

+0

Thankyou,我叫super.paintComponents并将更新我的代码。是否有教程或例子可以推荐演示您推荐的ImageObserver的用法? – 2012-08-08 01:58:15

+0

真的,你不需要担心它对你所做的事情太多了,它是由'Component'实现的,因此代表'JFrame'实现;) – MadProgrammer 2012-08-08 02:00:24

+0

@Pat如果你真的非常渴望看到'ImageObserver'在行动中,你可以看看http://www.daniweb.com/software-development/java/threads/177666/imageobserver-and-animated-gifs# – MadProgrammer 2012-08-08 02:05:57