2

この 100x100 ピクセルの .gif 画像が画面に表示されないのはなぜかと思っています。画像は同じディレクトリにあるため、プログラムは問題なく見つけることができます。この問題を解決する方法を知っている人はいますか?

import java.awt.*;
import java.awt.image.ImageObserver;
import java.io.File;
import javax.imageio.*;
import javax.swing.*;

public class Window extends JFrame{
//the pictures
ImageIcon guy = new ImageIcon("tester.gif");
JLabel pn = new JLabel(guy);
JPanel panel = new JPanel();

Window(){
    super("Photuris Lucicrescens");

    //Important
    setSize(700,600);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    add(panel);
    setVisible(true);
    //Decoration
    Image customIcon = Toolkit.getDefaultToolkit().getImage("iconImage.gif");
    setIconImage(customIcon);
    //Adding the image
    add(pn);
}
}
4

2 に答える 2

4

問題は、JFrame に 2 つのコンポーネントを追加することです。コンポーネントを JFrame に追加すると、実際にはコンテンツ ペインに追加されます。デフォルトでは、コンテンツ ペインは BorderLayout を LayoutManager として使用します。制約を設定しない場合、コンポーネントは中央にあると見なされます。したがって、ここでは 2 つのコンポーネントが中央にあり、LayoutManager から同じ境界を受け取るため、1 つのコンポーネントのみが表示され、もう 1 つのコンポーネントは非表示になります。これが、JLabel ではなく JPanel が表示される理由です。

JLabel を見たい場合は、そのパネルをフレームに追加しないでください。

その他の備考:

  • コンポーネント階層を作成したら、 setVisible() を呼び出す必要があります。
于 2012-05-31T06:05:23.520 に答える
2

コンピューターで試してみると、画像がアイコンに表示されます。背景に画像を表示したい場合は、これを試してください:

import java.awt.Image;
import java.awt.Toolkit;
import javax.swing.*;

        public class Caine extends JFrame{
        //the pictures
        ImageIcon guy = new ImageIcon("tester.gif");
        JLabel pn = new JLabel(guy);
        JPanel panel = new JPanel();

        Caine(){
            super("Photuris Lucicrescens");

            //Important
            setSize(700,600);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            add(panel);
            setVisible(true);
            JLabel im = new JLabel(new ImageIcon("iconImage.gif"));
            setIconImage(customIcon);
            panel.add(im);
            add(pn);
        }
        }
于 2012-05-31T05:19:26.810 に答える