2009-06-30 6 views

答えて

33

組み込みメソッドはありませんが、いくつかの方法があります。現時点で私が考えることができる最も単純な方法は、

  1. サブクラスJComponentを作成します。
  2. paintComponent(Graphics g)メソッドをオーバーライドして、表示するイメージをペイントします。このサブクラスであるJFrame
  3. Set the content pane

いくつかのサンプルコード:それはあなたが望んだ場合には、このコードは、JFrameに合わせて画像をリサイズ処理しないことを

class ImagePanel extends JComponent { 
    private Image image; 
    public ImagePanel(Image image) { 
     this.image = image; 
    } 
    @Override 
    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     g.drawImage(image, 0, 0, this); 
    } 
} 

// elsewhere 
BufferedImage myImage = ImageIO.read(...); 
JFrame myJFrame = new JFrame("Image pane"); 
myJFrame.setContentPane(new ImagePanel(myImage)); 

注意。

+2

あなたはpainComponentメソッドにsuper.paintComponents()メソッドを使用する必要があります。 – Sajad

17

これを試してみてください:

import java.io.File; 
import java.io.IOException; 

import javax.imageio.ImageIO; 
import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 


public class Test { 

    public static void main(String[] args) { 
     JFrame f = new JFrame(); 
     try { 
      f.setContentPane(new JLabel(new ImageIcon(ImageIO.read(new File("test.jpg"))))); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     f.pack(); 
     f.setVisible(true); 
    } 

} 

をちなみに、これはコンテンツ・ペインがコンテナでないになります。物事を追加したい場合は、JPanelをサブクラス化してpaintComponentメソッドをオーバーライドする必要があります。

+0

実際、JLabel(すべてのJComponentsと同様)はContainerを拡張しています。ラベルに何かを追加するとどうなりますか? –

+0

実際には何も...私はそれを試した。例えばJTextAreaを追加することはできますが、描画はしません。 –

+0

ラベルのレイアウトがnullであるため、何も表示されません。ラベルのレイアウトマネージャを設定し、コンポーネントを追加することができます。コンポーネントのサイズは、ラベルに追加されたコンポーネントではなく、イメージのサイズによって決まることに注意してください。 – camickr

6

Background Panelクラスを使用できます。上で説明したようにカスタムペイントを行いますが、拡大、タイルまたは通常サイズのイメージを表示するオプションがあります。また、イメージをフレームのコンテンツペインとして使用してJLabelを使用する方法についても説明します。

0
import javax.swing.*; 

import java.awt.*; 

import java.awt.event.*; 

class BackgroundImageJFrame extends JFrame 
{ 

    JButton b1; 
    JLabel l1; 

    public BackgroundImageJFrame() { 

     setSize(400,400); 
     setVisible(true); 

     setLayout(new BorderLayout()); 

     JLabel background=new JLabel(new ImageIcon("C:\\Users\\Computer\\Downloads\\colorful_design.png")); 

     add(background); 

     background.setLayout(new FlowLayout()); 

     l1=new JLabel("Here is a button"); 
     b1=new JButton("I am a button"); 

     background.add(l1); 
     background.add(b1); 
    } 

    public static void main(String args[]) 
    { 
     new BackgroundImageJFrame(); 
    } 
} 

チェックアウト、下のリンクを

http://java-demos.blogspot.in/2012/09/setting-background-image-in-jframe.html

関連する問題