dポイントプレゼントキャンペーン実施中!

過去質問で、「javaで起こったバグ?!」という質問をした者です。
親切な回答者の方々のおかげで、理解することが出来ました。
あのとき質問に答えてくださった回答者の方々本当にありがとうございます。

本題に戻ります。
この↓プログラムなんですが、インスタント変数pとJPanel p;で定義した、ローカル変数(おそらく。別の変数だよ、という意見がありましたら、ご指摘ください)は別物で、デバッグを行ったらローカルのp
の中身は、null(何も入ってない)といわれてしまいました。

プログラム↓
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class Sukejuru extends JFrame implements ActionListener {
JPanel p;
public static void main(String args[]) {

Sukejuru ske = new Sukejuru();

ske.setBounds(200,200,600,300);//大きさ&ウィンドウの位置
ske.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//クローズ
ske.setVisible(true);
}

Sukejuru() {
super("Myスケジュール");

JPanel p = new JPanel();
p.setBackground(Color.green);
add(p);

JButton b1 = new JButton("一月");
b1.addActionListener(this);
b1.setActionCommand("b1");
p.add(b1);

JButton b2 = new JButton("二月");
b2.addActionListener(this);
b2.setActionCommand("b2");
p.add(b2);

JButton b3 = new JButton("三月");
b3.addActionListener(this);
b3.setActionCommand("b3");
p.add(b3);
}

public void actionPerformed(ActionEvent e) {

JTable table = new JTable(5,5);
JScrollPane sp = new JScrollPane(table);
p.add(sp);
}
}

ボタンを押してもJTableは、現れません。押すとコマンドプロンプトでは次のようなエラー?が出ます。↓
Exception in thread"AWT-EventQueue-0"java.langNullPointerException
JPanel p(インスタント変数p)にコンポーネント(ローカル変数p)を貼り付けるには、どう記述すればいいのでしょうか?

A 回答 (2件)

コンストラクタにある、



JPanel p = new JPanel();
 ↓
p = new JPanel();

としてください。

JPanel p = new JPanel(); だと、このコンストラクタメソッド内でのみ利用できるJPanel変数pを作って、それに設定することになります。つまり、インスタンス変数pと同じ名前のローカル変数を作ってそっちに代入してしまうわけです。p = new JPanel();だと、既に用意されている変数pに代入します。
    • good
    • 0
この回答へのお礼

解決できした!!!
ありがとうございます!!
本当に感謝です

お礼日時:2012/10/20 21:06

その前回のときもヒント出したんだけどね。



> インスタント変数pとJPanel p;で定義した、ローカル変数(おそらく。別の変数だよ、という意見がありましたら、ご指摘ください)は別物で、デバッグを行ったらローカルのp の中身は、null(何も入ってない)といわれてしまいました

ぜんぜん理解できてないみたいじゃないですか。
ちゃんと理解したなら、はっきり「ローカル変数」と「インスタンス変数」が区別できるはずですよ。

変数とかメソッドとかクラスとかの「名前」には、それぞれ有効な範囲が(スコープ)があって、他のスコープの名前とは重ならないようになっています。
そうでないと、うかつに変数名をつけられないからです。

例えば、よくつかうfor ( i=0;...)などつかう変数 iが、どこかで使われてたら、知らないところで書き換えられて、ループ回数が変になる、なんてことがあると困りますよね?


変数の種類とスコープは、基本中の基本です。
それが理解できないうちは、GUIでのプログラミングなんて早すぎます。
まずは、基礎の学習をしっかりやってください
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

私が扱った本では、メイン変数とSTATIC変数の説明しかされていなかったので、それ以外の変数に関しては皆無でした。
ネットなどをみて勉強したのですが、たりないみたいですね。(ネットのものは、理解しにくいものが多い)

色々参考書を見ながら、勉強していきたいと思います。

お礼日時:2012/10/20 19:24

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