0

画面上の特定の座標に画像ラベルを配置したい。
以下のコードを使用しましたが、機能しません。
また、コメント行をコードに追加すると、エラーが発生します

import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.*;

public class EmiloLadderSnack
{
    public static void main(String args[])
    {
        Graphics g;
        JFrame frame=new JFrame("EmiloLadderSnack");
        JPanel panel=new JPanel();
        frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
        frame.setBounds(0, 0, Toolkit.getDefaultToolkit().getScreenSize().width, Toolkit.getDefaultToolkit().getScreenSize().height);
        frame.setVisible(true);
        frame.add(panel);
        BufferedImage img=null;
        try
        {
            img=ImageIO.read(new File("/media/01CCE00FA6888D80/Achieve/Eclipse/EmiloLadderSnack/src/photo.jpg"));
        }
        catch(IOException e)
        {
            //g.drawString(e.toString(), 0, 0);
        }
        ImageIcon icon=new ImageIcon(img);
        JLabel lbl=new JLabel(icon);
        lbl.setLocation(50, 50);
        panel.add(lbl);
        lbl.setLocation(50, 50);
    }
}

この問題を解決するのを手伝ってください

4

2 に答える 2

1

最初にコンポーネントをフレームに追加してから、、またはを呼び出すpack()必要がsetSize()ありsetVisible()ます。あなたの場合、ImageIconフレームがすでに表示された後でパネルに追加します。追加panel.revalidate();すると、当面の問題が解決するはずです。ただし、最初にフレームの作成方法のチュートリアルを実行することをお勧めします。

2番目の質問に関しては、Graphicsオブジェクトは初期化されていません。さらに、これはどのGraphicsように使用されるべきかではありません。コンポーネントの表面に文字列を描画する場合は、paintComponent()をオーバーライドして、提供されているオブジェクトを使用しGraphicsます。詳細については、レッスン:カスタムペイントの実行を参照してください。それ以外の場合、単にエラーについてユーザーに通知することを目的としている場合は、JOptionPaneを使用できます。関連するチュートリアルは、ダイアログの作成方法です。

また、絶対レイアウトの使用は非常に難しい場合があります。さまざまなレイアウトマネージャーとその基本的な使用法を理解するには、レイアウトマネージャーのビジュアルガイドをご覧ください。

于 2012-07-09T04:39:25.277 に答える
0
setVisible(true);

should write at the end of, adding all components to Frame.

or else write the

panel.revalidate(); 

after adding the components to panel.

Your code is here:

import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.*;

public class EmiloLadderSnack
{
public static void main(String args[])
{
    Graphics g;
    JFrame frame=new JFrame("EmiloLadderSnack");
    JPanel panel=new JPanel();
    frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
    frame.setBounds(0, 0, Toolkit.getDefaultToolkit().getScreenSize().width, Toolkit.getDefaultToolkit().getScreenSize().height);

    frame.add(panel);
    BufferedImage img=null;
    try
    {
        img=ImageIO.read(new File("/media/01CCE00FA6888D80/Achieve/Eclipse/EmiloLadderSnack/src/photo.jpg"));
    }
    catch(IOException e)
    {
        //g.drawString(e.toString(), 0, 0);
    }
    ImageIcon icon=new ImageIcon(img);
    JLabel lbl=new JLabel(icon);
    lbl.setLocation(50, 50);
    panel.add(lbl);
    lbl.setLocation(50, 50);
    frame.setVisible(true);//put it here
}
}
于 2012-07-09T05:07:51.183 に答える