自作ウィンドウを閉じる方法について

このQ&Aのポイント
  • JAVAの書籍を参考にして自作ウィンドウを閉じるプログラムを作成していますが、×ボタンをクリックしてもウィンドウが閉じません。
  • 実際のコードは、EventDisposeクラスを作成してFrameクラスを継承し、MyWindowAdapterクラスでWindowClosingイベントを処理し、System.exit(0)でプログラムを終了しています。
  • しかし、ウィンドウを閉じることができない問題が発生しています。開発環境はeclipseの3.4です。
回答を見る
  • ベストアンサー

自作ウィンドウを閉じる方法について

只今、これならわかるJAVAという書籍でウィンドウを生成し、×ボタンがクリックされたら、ウィンドウを閉じる(プログラムを終了する)ようなプログラムを作っているのですが、書籍通りに記述しているのですが、×ボタンをクリックしてもウィンドウが閉じません。ソースは、 import java.awt.*; import java.awt.event.*; //ウィンドウを表すクラスFrameを継承し、自作のウィンドウを表すクラスを作成する public class EventDispose extends Frame{ public EventDispose() { addWindowListener(new MyWindowAdapter()); } class MyWindowAdapter extends WindowAdapter{ public void WindowClosing(WindowEvent e) { System.exit(0); } } } です、。表示を行っているクラスが、 public class MyWinApp { public static void main(String[] args) { //自作のウィンドウの生成(コンストラクタの実行) EventDispose ed = new EventDispose(); //ウィンドウのサイズの指定 ed.setSize(300,200); //生成したウィンドウを可視状態にする ed.setVisible(true); } } です。開発環境はeclipseの3.4です。 どうかご教授よろしくお願い致します。

  • Java
  • 回答数1
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

public void WindowClosing(WindowEvent e) { の WindowClosing→windowClosing java.awt.event.WindowAdapterのwindowClosingをオーバーライドするのだから、メソッド名が違ってたら別メソッドとして定義されるので当然実行されないですよ。

dfjews
質問者

お礼

なるほど!単なるメソッド名の誤記ということですね>< メソッド名の頭文字はたいてい大文字なので、その先入観でメソッド名が怪しいという疑いがまったくありませんでした。 まさかこんな単純なミスだったとは>< ProKaseifuさん、助かりました。オーバーライドするときは、 もっと気を付けるしたいと思いました。 ありがとうございます^-^助かりました。

関連するQ&A

  • java初心者です

    空のウィンドウを作ってみたものの ウィンドウが閉じれません。ファイル名はMyApp3.javaです。クラスファイルは3つちゃんとできてます import java.awt.*; import java.awt.event.*; class MyFrame extends Frame { public MyFrame(){ addWindowListener(new MyWindowAdapter()); } class MyWindowAdapter extends WindowAdapter { public void WindowClosing(WindowEvent e){ System.exit(0); } } } public class MyApp3 { public static void main(String[] args){ MyFrame f =new MyFrame(); f.setSize(300,200); f.setVisible(true); } }

    • ベストアンサー
    • Java
  • AWTでウィンドウを閉じる仕組み

    import java.awt.*; import java.awt.event.*; class WindowClose extends WindowAdapter{ public void windowClosing(WindowEvent we){ System.exit(0); } } class Figure extends Frame{ public Figure(String name){ setTitle(name); setLocation(300,200); setSize(300,200); setBackground(Color.ORANGE); WindowClose wc = new WindowClose(); addWindowListener(wc); } } public class Test{ public static void main(String [] args){ Figure figure = new Figure("Frame1"); figure.show(); } } 初歩的なことな質問で申し訳ないです。 このような処理でウィンドウを閉じているのですが、具体的に何を取得してどんな動作をしているのかがよくわかりません。 wcというインスタンスにウィンドウリスナーのオブジェクトが追加登録されるという感じだと思いますが、extends されているWindowAdapterクラスにはすでにウィンドウリスナーのインスタンスが実装されていますよね。一体何の意味があるのでしょうか。

    • ベストアンサー
    • Java
  • Frameクラスにアクセスできない??

    初心者なのですが、下記のソースをコンパイルすると、下のエラーが表示されます。 CLASSPATHがおかしいんでしょうか? バージョンはJ2SE1.5.0_03です。 C>javac app.java コンパイルエラー内容: .\Frame.java:4: クラス AppFrame が重複しています。 class AppFrame extends Frame{ ^ app.java:4: Frame にアクセスできません。 クラスファイル .\Frame.java は不正です。 ファイルにクラス Frame が含まれていません。 削除するか、クラスパスの正しいサブディレクトリにあるかを確認してください。 class AppFrame extends Frame{ ^ エラー 2 個 サンプルコード mport java.awt.*; import java.awt.event.*; class AppFrame extends Frame{ public void paint(Graphics g){ g.drawString("Hello frame Java!",60,100); } } public class app{ public static void main(String[] args){ AppFrame f=new AppFrame(); f.setSize(200,200); f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e) { System.exit(0);}}); f.show(); } }

    • ベストアンサー
    • Java
  • 別クラスからTextFieldなどを加える方法

    メインのクラスとは別のクラスでボタンなどを表示させたいのですが、方法がわかりません。 一応 import java.awt.*; import java.awt.event.*; class Test extends Frame{ private Image offImage; //仮想画面 private Graphics gv; // 仮想画面Graphicsオブジェクト private SubClass SC; //サブクラス public Test(){ setTitle("Test"); setSize(400,300); setVisible(true); //仮想画面の生成 offImage = createImage(400,300); gv = offImage.getGraphics(); //閉じる addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);}}); //サブクラス生成 SC = new SubClass(this); myDraw(); } public static void main(String args[]){ Frame f = new Test(); } public void myDraw(){ gv.drawString("仮想画面を使って表示しています。",100,100); } public void paint(Graphics g){ //仮想画面を表示 g.drawImage(offImage,0,0,this); } public void update(Graphics g){} } class SubClass{ Test T; public SubClass(Test t){ T = t; T.add(new TextField(10)); } } こんな感じでやろうとしてみたのですが、できません。 どうすればいいか教えてください!!お願いします。。。

  • Javaのエラーなのですが

    import java.awt.*; import java.awt.event.*; class PrefFrame extends Frame { public PrefFrame(String title) { //フレームのタイトル setTitle(title); //ウィンドウを閉じる時 addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } } public class PrefTest { public static void main(String args[]) { PrefFrame frm = new PrefFrame("都道府県マスター"); frm.setLocation(300, 200); frm.setSize(250, 350); frm.setBackground(Color.LIGHT_GRAY); frm.setVisible(true); } } と入力しました。コンパイルは出来て、CLASSファイルは作成できたのですが、実行できずにエラーException in thread "main" java.lang.NoClassDefFoundError: PrefTest/javaとなってしまいます。実行するためにはどうしたらよいのでしょうか?

  • Javaプログラムの繋げ方について。

    Javaプログラムの繋げ方について。 今まで(1)のようなプログラムを書いていました。 作りたいものに向けて色々検索するとやりたいものに近い(2)のようなサンプルプログラムを見つけました。 しかし、Java初心者なもので混ぜ方(?)がわかりません。 現在の私の知識からいうと今までのはアプレットでフレーム使うのはアプリケーションなのかな?別物なのかな?そんな感じです。 もし、混ぜることができるなら何かアドバイスをお願いします。 (1)package test; import java.applet.* ; import java.awt.Label ; import java.awt.Font ; import static java.awt.Font.BOLD ; import java.util.*; import java.awt.Graphics; import java.awt.Image; import java.awt.*; public class test extends Applet{ public void paint(Graphics g){ g.setColor(Color.red); g.fillOval(320, 200, 100, 100); } public void init () { ~~~~~~~~~~~~~~~~ } public void start () { ------------ }}} (2)import java.awt.*; import java.awt.event.*; public class MouseEvent7 extends Frame { int posX = 50; int posY = 50; public static void main(String [] args){ new MouseEvent7(); } //コンストラクタ MouseEvent7(){ this.addWindowListener(new WinAdapter()); //ウィンドウリスナーの登録 this.setSize(200,200); this.setVisible(true); //MouseMotionListenerの登録 addMouseMotionListener( new MouseMotionAdapter(){ public void mouseMoved(MouseEvent e){ posX = e.getX(); posY = e.getY(); repaint(); //paintメソッドを実行 } } ); } public void paint(Graphics g){ g.drawOval(posX,posY,50,50); } } (1)の内容に本当に(2)のプログラムで出来るマウスの動きに合わせて円も動く+クリックしたらそこで止まるだけいいのですが。 出来たら止まった点の座標も取りたいですが、そこまではいってません;;

  • 内部クラスにする方法教えてください!

    import java.awt.*; import javax.swing.*; import java.awt.event.*; public class Line extends JPanel { int x0, y0, x1, y1; public static class WindowCloser extends WindowAdapter { public void windowClosing(WindowEvent e) { System.exit(0); } } public static class ClickTracker extends MouseAdapter { private Line line; public ClickTracker(Line enclosing) { line = enclosing; } public void mouseClicked(MouseEvent e) { line.x0 = line.x1; line.y0 = line.y1; line.x1 = e.getX(); // MouseEventクラスのgetXメソッドでマウスのx座標値を取得 line.y1 = e.getY(); // MouseEventクラスのgetYメソッドでマウスのx座標値を取得 line.repaint(); // ウィンドウの表示を再描画 } } public Line() { x0 = y0 = x1 = y1 = 0; addMouseListener(new ClickTracker(this)); JFrame frame = new JFrame(); frame.addWindowListener(new WindowCloser()); frame.getContentPane().add(this); frame.setSize(300,300); frame.setVisible(true); } public void paintComponent(Graphics g) { super.paintComponent(g); g.drawLine(x0, y0, x1, y1); } public static void main(String[] args) { Line c = new Line(); } } 上のプログラムのClickTrackerクラスを内部クラスに書き換えたいんですけどどなたか教えてください!

    • ベストアンサー
    • Java
  • ウインドウ上で変数を表示する方法はありますか?

    ウインドウ上で変数を表示する方法はありますか? system.out.println()ではコマンドプロンプトだけで表示されるので それをウインドウを作成して表示させたいんです。 よろしくお願いします。 import java.awt.*; import java.awt.event.*; import java.applet.Applet; import java.awt.Graphics; class PrefFrame extends Frame { public PrefFrame(String title) { //フレームのタイトル setTitle(title); //ウィンドウを閉じる時 addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } } public class xptable { public static void main(String[] args) { PrefFrame frm = new PrefFrame("ラテーブル"); frm.setLocation(300, 200); frm.setSize(600, 480); frm.setBackground(Color.black); frm.setVisible(true); double exp = 0; int Lv = 1; double xp = 1900; double cxp = 0; while(Lv < 200){ if (cxp>xp){ Lv = Lv+1; System.out.println("レベル"+ Lv +"になりました。おめでとうございます。"); xp = xp*1.1; } else { exp = Math.round((Math.random()*90000000)); System.out.println((int)Math.floor(exp) + " 経験値獲得しました。");/*切捨て*/ cxp = cxp+exp; } } } }

  • これを正確に実行したいのですが

    再びすみません。 下のプログラムなのですが。コンパイルはできるのに 図が表示されず、終わらず、実行がおかしなことになってしまいます。どこを直したらいいのでしょうか? お願い致します。 import java.awt import java.awt.event.*; class gazou extends Frame { public gazou(){ setSize(300,200); addWindowListener(new WindowAdapter( ) public void windowClosing(WindowEvent e) System.exit(0); } }); } public void paint(Graphics g) g.drawRect(40,40,50,50); g.drawRoundRect(100,40,50,50,10,10); g.drawOval(160,40,50,50); g.drawArc(220,40,50,50,45,270); g.fillRect(40,100,50,50); g.fillRoundRect(100,100,50,50,10,10); g.fillOval(160,100,50,50); g.fillArc(220,100,50,50,45,270); g.drawLine(40,180,260,180); } } public class kadai19{ public static void main(String[] args) { Frame w = new Frame(); w.show( ); } }

    • ベストアンサー
    • Java
  • フレームを表示できないのですが・・・

    こんにちは。ジャバ初心者です。下記のプログラムを javac Sample120.java と入力してコンパイルはできたのですが java Sample120 と入力すると Exception in thread "main" java.lang.NoClassDefFoundError: Sample120 というメッセージが出て実行できないのですがどのようにすればいいですか? import java.awt.*; import java.awt.event.*; class Sample120 extends Frame { public static void main(String args[]) { Sample120 app = new Sample120(); } public Sample120() { setSize(250,100); setVisible(true); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } public void paint(Graphics g) { g.drawString("Hello Java AWT!",10,60); } }

    • ベストアンサー
    • Java