2009-10-10 77 views
0

我在Image的頂部添加JPanel時出現問題。這是我想要做的:圖像和麪板

Image bgImage = loadImage(filename); 
JPanel jp = new JPanel(); 

jp.setBounds(100,100,100,100); 
jp.setOpaque(true); 
jp.setBackgroudColor(Color.red); 

bgImage.add(jp); 

做完這些之後,我只看到bgImage。我嘗試了一切,但仍然無法顯示面板。有人能幫助我嗎?

+0

'setBackgroundcolor'存在拼寫錯誤。 – Svante 2009-10-11 16:54:47

+0

無論如何,在JPanel上沒有名爲'setBackgroundColor'的方法:-) – SingleShot 2009-10-11 17:01:36

回答

4

您不能在Image內放置組件。你想要做的就是將Image塗在擺動組件的背景上(如JPanel)。所有擺動組件都有一個調用這三種方法的paint()方法(可能不是這個順序):paintComponent()paintChildren()paintBorder()。所以,你想重寫paintComponent()方法在面板上繪製背景圖像。當這個運行時,您的自定義的方法將被調用,然後paintChildren()方法將被調用,這將油漆全部「子」組件在你的背景圖像的頂部:

class BackgroundImagePanel extends JPanel { 

    public void setBackgroundImage(Image backgroundImage) { 
     this.backgroundImage = backgroundImage; 
    } 

    @Override 
    protected void paintComponent(Graphics graphics) { 
     super.paintComponent(graphics); 
     graphics.drawImage(backgroundImage, 0, 0, this); 
    } 

    private Image backgroundImage; 
} 

BackgroundImagePanel panel = new BackgroundImagePanel(); 
panel.setBackgroundImage(image); 
panel.add(new JTextField("Enter text here...")); 
panel.add(new JButton("Press Me")); 
+0

呃,對不起,如果我的代碼是垃圾。我有一個更長的代碼工作(不是頂部的)。但我真的需要把面板放在圖像的頂部,因爲從那裏我將放置擺動組件...簡單地說,我想要一個圖像作爲我的背景,頂部有一個'隱形'面板,最後擺動組件。 :| – annaoj 2009-10-11 01:33:57

+0

行,理解。我編輯了我的答案,以便更具描述性。 – SingleShot 2009-10-11 16:13:49

0

的「BackgroundImagePanel」溶劑型塗料的圖像的實際大小。如果這是需求,那麼您可以使用JLabel而不是創建自定義組件。

BackgroundPanel條目顯示瞭如何做到這一點。它還提供了一個具有更多自定義圖像繪畫解決方案的背景面板,如果這是您的要求的一部分,這將允許您縮放和平鋪圖像。