私はJFrame内に2つのJPanelsを含むプログラムを設計しています。1つは画像を保持するためのもので、もう1つはGUIコンポーネント(検索フィールドなど)を保持するためのものです。 JFrame内の最初のJPanelに画像を描画するにはどうすればよいですか。
これが私のコンストラクタからのサンプルコードです:
public UITester() {
this.setTitle("Airplane");
Container container = getContentPane();
container.setLayout(new FlowLayout());
searchText = new JLabel("Enter Search Text Here");
container.add(searchText);
imagepanel = new JPanel(new FlowLayout());
imagepanel.paintComponents(null);
//other constructor code
}
public void paintComponent(Graphics g){
super.paintComponents(g);
g.drawImage(img[0], -50, 100, null);
}
JPanelのpaintComponentメソッドをオーバーライドして画像をペイントしようとしましたが、これを作成しようとすると、コンストラクターで問題が発生します。
imagepanel.paintComponents(null);
それは私がメソッドnを渡すことのみを許可し、グラフィックスgを渡さないので、誰でもこのメソッドまたはJPanelで画像を描画するために使用できる別のメソッドの修正を知っていますか?助けていただければ幸いです! :)
よろしくお願いします。マット
もっと簡単な方法を提案したいのですが、
image = ImageIO.read(new File(path));
JLabel picLabel = new JLabel(new ImageIcon(image));
イェイ!これで画像がSwingコンポーネントになりました。フレームやパネルなど、普段と同じように追加してください。おそらく、次のような再ペイントも必要です
jpanel.add(picLabel);
jpanel.repaint();
JLabel.setIcon()
を使用して、画像をJPanelに here のように配置できます。
一方、背景付きのパネルが必要な場合は、 this チュートリアルをご覧ください。
コンストラクタから手動でpaintComponent()
を呼び出す必要はありません。問題は、Graphics
オブジェクトにnullを渡すことです。代わりに、paintComponent()
をオーバーライドし、ペイントに使用するメソッドに渡されたGraphics
オブジェクトを使用します。これをチェックしてください チュートリアル 。以下は、画像付きのJPanel
の例です。
class MyImagePanel extends JPanel{
BufferedImage image;
public void paintComponent(Graphics g){
super.paintComponent(g);
if(image != null){
g.drawImage(image, 0, 0, this);
}
}
}