2012-08-08 84 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