重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

JFrameについて質問があるのですが

import javax.swing.*;

public class JFrameTest extends JFrame{

public static void main(String[] args){
JFrameTest frame = new JFrameTest();

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(10, 10, 300, 200);
frame.setTitle("タイトル");
frame.setVisible(true);
}

JFrameTest(){
JPanel p = new JPanel();
  Container contentPane = getContentPane();
ContentPane.add(p);
  pack();
}
}

このプログラムと

import javax.swing.*;

public class JFrameTest{

public static void main(String[] args){
JFrame frame = new JFrame("フレームのタイトル");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds( 10, 10, 300, 200);
frame.setVisible(true);
JPanel p = new JPanel();
  Container contentPane = frame.getContentPane();
frame.ContentPane.add(p);
  frame.pack();
}
}

このプログラムは何が違うのでしょう?
やってることはまったく一緒だと思ってたのですが、全然違うみたいです。
上のプログラムの
JFrameTest(){
はコンストラクタと呼ばれるものなのでしょうか?
しょぼい質問で申し訳ないのですが誰か教えていただけないでしょうか。

A 回答 (2件)

私の認識程度で解説させていただきます。


上のプログラムと下のプログラムは、単純に考えると同じ動作を行うプログラムですが、
> JPanel p = new JPanel();
以下4行が
> JFrameTest(){
という、コンストラクタの中にあるかどうかということで、最終的な動作は違ってきます。

ちなみに
> JFrameTest(){
はコンストラクタで正しいです。

コンストラクタがあるということは、
> JPanel p = new JPanel();
以下4行の処理が実行されるとき、必ず初期化されて実行されます。( 以下URL参照 )
-> http://www.javadrive.jp/start/constructor/index1 …

また、フレーム上に初期化されたJPanelクラスのオブジェクト( コンポーネント )を追加するようになっています。
-> http://www.javadrive.jp/tutorial/jframe/index8.h …

まとめますと、
・上はコンストラクタ内の処理が実行されるとき、必ず初期化する。
・下は初期化を行わない。
だと私は認識しています。

ちなみに私は上のコンストラクタを使った方法で簡単なランチャーを作ったりしています。
    • good
    • 0
この回答へのお礼

分かりやすい説明ありがとうございます!
僕が参考にしたのも同じサイトだったんですが、違いがよく分からなかったんです・・・

お礼日時:2008/12/23 18:59

JFrameTest はコンストラクタになります。


上のプログラムと下のプログラムは、基本的動作は同じです。
ただ相違点は、

(1) 上のプログラム(javax.swing.JFrameクラス継承)
  パネル編集(JFrameTestオブジェクト生成)後フレーム表示設定
  パネル編集はJFrameTestコンストラクタ内で行う。

(2) 下のプログラム
  JFrameクラスインスタンス生成後、パネル編集とフレーム表示設定
    • good
    • 0

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