3

私はとを持っていJFrameますBorderLayout、すべての側面(北、東、...)にパネルがあります。パネルには主にラベルとボタンがあります。

フレームに背景画像を付けたいのですが、ある調査によると、フレームのコンテンツペインを変更する必要がありました。

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

これに対する簡単な修正はありますか、それともコードの大部分を作り直す必要がありますか?

4

3 に答える 3

4
  1. に背景画像を入れてJPanel(または) 、これで領域全体が塗りつぶされ、残りの部分はこれに入れられますJComponentBorderLayout.CENTERJPanelJFrameJComponentsJPanel

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

    これらJComponentsはすべて利用可能RectangleJFrameあり、Background Image(私の最初のポイントから)表示されることはありません。これらJComponentsはon_topであり、これもJFrame非表示にすることができるためです。Image

  3. 追加JPanel with Background Image(私の最初のポイントから)、次に別のJPanel(s)を追加するとJPanel#setOpaque(false);、これJPanelは透過的になり、通知JPanelはデフォルトで実装されていますFlowLayout

于 2012-03-22T03:58:28.613 に答える
1
frame.getContentPane().add(new JPanel() {

      public void paintComponent(Graphics g) {
            g.drawImage(img, 0, 0, this.getWidth(), this.getHeight());
      }
});
于 2012-03-22T05:21:54.833 に答える
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);
于 2012-03-22T05:24:49.380 に答える