プロが教えるわが家の防犯対策術!

java swingでGUIをプログラミングしている者です。
JLabelにImageIconの画像を貼り付けるプログラムです。↓

//画像を表示するプログラム

//インポート
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

class gazopro extends JFrame{
JLabel l1;
JButton b1;
JPanel p;

public static void main(String args[]) {

//ウィンドウを作成また設定

gazopro frame = new gazopro();
frame.setBounds(300,200,700,400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}

gazopro(){

//コンポーネントを作成

p = new JPanel();
add(p);

b1 = new JButton("画像を表示");
p.add(b1);

ImageIcon icon = new ImageIcon("image.jpg");

l1 = new JLabel(icon);
p.add(l1);
}
}

  わからないところは、ImageIcon icon = new ImageIcon("image.jpg");のところです。
ImageIconの引数は、プログラミングを行っているパソコン(OS は Windows)のマイコンピューター→
Cドライブ→ MyJava→ image.jpgを指定しましたがこれで合ってますか?
このプログラムでは、画像が表示されませんでした。
どうすればいいでしょうか?
解説と、ご指導宜しくお願いします。

A 回答 (2件)

OSには、「カレントディレクトリ」というものがある。


「作業フォルダ」とか「実行時ディレクトリ」とか呼ばれることもある。

ファイルの指定方法には主に次の3つ
・絶対パス
・相対パス
・ファイル名だけ

絶対パスは絶対的な一番上(ルートディレクトリ)から指定するもの。

相対パスは、カレントディレクトリをスタート地点にして、そこからの相対的な位置関係(上とか下とか)で指定するもの

ファイル名だけの場合は、特に指定がなければ、相対パスに準じる。
「ファイル名だけの場合は、○○ディレクトリから検索する」等とマニュアルにあればそこから探す。

で、Swing.ImageIconのコンストラクタのマニュアルを読む
http://docs.oracle.com/javase/jp/6/api/javax/swi …
ファイル検索場所について、特に明記されていないので、
「ファイル名だけの場合は、特に指定がなければ、相対パスに準じる。」
→「相対パスは、カレントディレクトリをスタート地点にして、そこからの相対的な位置関係」
→「カレントディレクトリにある『ファイル名』のファイル」
となる。




以上のようなファイルやディレクトリについての動作は、Java全般(さらに言えば、コンピュータでのプログラム全般)について言えることです。
ファイルを読み書きするときの基本中の基本です。

しつこいようですが、まずは基本を勉強しましょうよ。
GUIの入門書や解説サイトは「Java自体はマスターしている」ことが前提で書かれてるので、このようなファイル操作の基本とか、オブジェクト指向とかについて、まったくと言っていいほど解説していません。そんなのを見様見真似でやったって、理解できるわけがありません。

足し算が理解できてないのに、教科書に載ってた微分方程式を書き写して出来る気になってるようなもんです。
    • good
    • 0

デフォルトでは、プログラムのある階層にあるファイルを検索しますから、ホームディレクトリ内にあるファイルは読めません。

これは、System.getPropertyを使ってホームディレクトリのパスを取得し、それにファイル名などを付け足してファイルのフルパスを生成して利用すればいいでしょう。


String filepath = System.getProperty("user.home") + File.separator + "image.jpg";

こんな感じでホームディレクトリにあるimage.jpgのファイルパスが得られると思いますので、それを指定して読み込んでみてください。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!