過去質問で、「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)を貼り付けるには、どう記述すればいいのでしょうか?
No.1ベストアンサー
- 回答日時:
コンストラクタにある、
JPanel p = new JPanel();
↓
p = new JPanel();
としてください。
JPanel p = new JPanel(); だと、このコンストラクタメソッド内でのみ利用できるJPanel変数pを作って、それに設定することになります。つまり、インスタンス変数pと同じ名前のローカル変数を作ってそっちに代入してしまうわけです。p = new JPanel();だと、既に用意されている変数pに代入します。
No.2
- 回答日時:
その前回のときもヒント出したんだけどね。
> インスタント変数pとJPanel p;で定義した、ローカル変数(おそらく。別の変数だよ、という意見がありましたら、ご指摘ください)は別物で、デバッグを行ったらローカルのp の中身は、null(何も入ってない)といわれてしまいました
ぜんぜん理解できてないみたいじゃないですか。
ちゃんと理解したなら、はっきり「ローカル変数」と「インスタンス変数」が区別できるはずですよ。
変数とかメソッドとかクラスとかの「名前」には、それぞれ有効な範囲が(スコープ)があって、他のスコープの名前とは重ならないようになっています。
そうでないと、うかつに変数名をつけられないからです。
例えば、よくつかうfor ( i=0;...)などつかう変数 iが、どこかで使われてたら、知らないところで書き換えられて、ループ回数が変になる、なんてことがあると困りますよね?
変数の種類とスコープは、基本中の基本です。
それが理解できないうちは、GUIでのプログラミングなんて早すぎます。
まずは、基礎の学習をしっかりやってください
回答ありがとうございます。
私が扱った本では、メイン変数とSTATIC変数の説明しかされていなかったので、それ以外の変数に関しては皆無でした。
ネットなどをみて勉強したのですが、たりないみたいですね。(ネットのものは、理解しにくいものが多い)
色々参考書を見ながら、勉強していきたいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- C言語・C++・C# スタックフレームの消滅 6 2023/05/20 12:33
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- Java java final 1 2022/06/10 22:49
- JavaScript 電車の運賃を出すプログラムを作っています。 2 2022/06/22 09:36
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- Java Java 配列<選挙> 4 2023/07/31 15:07
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ウィンドウなしで画像表示
-
setPrefferedSizeとsetSize
-
EXECLの行を削除
-
JavaのswingでCardLayoutの画面...
-
c言語のプログラミングで1から1...
-
java junit list同士の比較方法
-
エラーで式の開始が不正ですと...
-
KeyListenerの使い方について
-
チェックボックスを動的に生成する
-
javaで文字数制限するには?
-
JSPやサーブレットでSystem.out...
-
ダブルクォーテーションのrepla...
-
ページング
-
ループ処理の際、最後だけ","を...
-
ORA-01858: 数値を指定する箇所...
-
C言語のポインターに関する警告
-
続・ZZZ,ZZZ,ZZ9形式の金額形式...
-
IF関数でEmpty値を設定する方法。
-
javaのCSVデータ読込についてです
-
干支の計算で。。。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
java junit list同士の比較方法
-
javaで文字数制限するには?
-
JPanelの切り替えと再描画
-
連番をオブジェクト名の最後に...
-
JPanelの重ね方/OverlayLayout他
-
JavaのswingでCardLayoutの画面...
-
JavaでのSwingを使った簡易電卓...
-
ArrayListの使い方について(初...
-
4択クイズでのランダム出題の...
-
KeyListenerの使い方について
-
JDialogを閉じた時の処理
-
BMI測定を作ろうとしている...
-
TextAreaでの文字の色
-
EXECLの行を削除
-
Java-Swing TextAreaにスクロー...
-
setPrefferedSizeとsetSize
-
【Swing】JPanel クラス外から...
-
最後の行に移動するには?
-
あるコンボボックスを選択する...
-
JButton-背景の透明化
おすすめ情報