2012-03-22 19 views
3

JFrameにはBorderLayoutがあり、すべての面(北、東、...)にパネルがあります。パネルには主にラベルとボタンがあります。背景画像を含むJFrame

フレームに背景イメージがあるようにするために、私のフレームのコンテンツペインを変更しなければならないという調査がありました。

私はこれを試してみると、コンテンツはバックグラウンドに置かれ、表示されません。また、フレームのサイズが変更された場合、イメージのサイズを変更する方法もわかりません。

これは簡単に修正できるのですか、コードの大部分を改めて修正する必要がありますか?

答えて

4
  1. BorderLayout.CENTERに背景画像にJPanel(またはJComponent)を入れ、その後、このJPanelは全てカバーされ、このJPanel

  2. there are Jpanels on all sides (North, East ,...). In the Jpanels there are Jlabels and Jbuttons mostly.

    これらJComponentsに全体JFrameエリア、YOUT JComponentsプットの残りの部分を埋めます利用可能なRectangleJFrameの場合、Background Image(私の第1ポイントから)は決して表示されません。これらJComponentsJFrame on_topあると

  3. は(私の第一のポイントから)JPanel with Background Imageを追加するだけでなく、このImageを隠すことができ、その後、JPanel#setOpaque(false);で別のJPanel(s)が入れ、その後、このJPanelが透明になり、予告JPanelはデフォルトFlowLayoutで実装しています

+1

'のGridLayout()'と非常に類似 'BorderLayout'ワークの' CENTER'。 – trashgod

1
frame.getContentPane().add(new JPanel() { 

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

注意:a)画像がどこにでも透明でない場合にのみ有効なオーバーライドです。 b)contentPaneに追加するすべての要素の下にあるという要件を満たしていない:-) – kleopatra

0

この例では、あなたが開始されます。任意のJPanelのように使用します。

public class JPanelWithBackground extends JPanel { 
Image imageOrg = null; 
Image image = null; 
{ 
    addComponentListener(new ComponentAdapter() { 
     public void componentResized(ComponentEvent e) { 
      int w = JPanelWithBackground.this.getWidth(); 
      int h = JPanelWithBackground.this.getHeight(); 
      image = w>0&&h>0?imageOrg.getScaledInstance(w,h, 
        java.awt.Image.SCALE_SMOOTH):imageOrg; 
      JPanelWithBackground.this.repaint(); 
     } 
    }); 
} 
public JPanelWithBackground(Image i) { 
    imageOrg=i; 
    image=i; 
    setOpaque(false); 
} 
public void paint(Graphics g) { 
    if (image!=null) g.drawImage(image, 0, 0, null); 
    super.paint(g); 
} 
} 

使用例:

Image image = your image 
    JFrame f = new JFrame(""); 
    JPanel j = new JPanelWithBackground(image); 
    j.setLayout(new FlowLayout()); 
    j.add(new JButton("YoYo")); 
    j.add(new JButton("MaMa")); 
    f.add(j); 
    f.setVisible(true); 
+3

-1(paintComponentの代わりに)オーバーライドするための-1 – kleopatra