![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
JAVAアプレットでプログラムを作成していまして、FileInputStreamで
取り込んだデータをフレームに表示させたんですが、表示させたフレーム
のボタン(ウィンドウ右上の×ボタンなど)何を押しても終了できないんです。
それで色んな所で探していて、フレームを閉じる処理が見つかったので、
それを追加してみましたが、それもだめです。
これはどのようにすればよろしいのでしょうか?
下記にソースを記述しておきますので、悪い点がございましたら教えてください。
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.lang.*;
class frame extends Frame implements WindowListener
{
Color bgcolor;
Font font;
Label lab_1,lab_2;
frame()
{
super("title");
setLayout(null);
bgcolor = new Color(240,248,255);
setBackground(bgcolor);
setForeground(Color.black);
addWindowListener(this);
font = new Font("Serif",Font.PLAIN,13);
/* Labelを作成 */
lab_1 = new Label();
lab_2 = new Label();
lab_1.setFont(font);
lab_1.setText("TEST1");
lab_1.setBounds(20,20,60,30);
add (lab_1);
lab_2.setFont(font);
lab_2.setText("TEST2");
lab_2.setBounds(80,20,60,30);
add (lab_2);
}
protected void processWindowEvent(WindowEvent endEvent)
{
System.exit(0);
}
}
No.3ベストアンサー
- 回答日時:
とりあえず、コンパイルエラーが出ませんか?
インターフェイスをimplementsしてあるので、
インターフェイスのなかで定義されているメソッドはすべて定義しなくてはなりません。
具体的には下記のものです。
void windowActivated(WindowEvent e)
ウィンドウがユーザのアクティブウィンドウに設定されたときに呼び出されます。
void windowClosed(WindowEvent e)
ウィンドウに対する dispose の呼び出しの結果として、ウィンドウがクローズされたときに呼び出されます。
void windowClosing(WindowEvent e)
ユーザが、ウィンドウのシステムメニューでウィンドウを閉じようとしたときに呼び出されます。
void windowDeactivated(WindowEvent e)
ウィンドウがユーザのアクティブウィンドウではなくなったときに呼び出されます。
void windowDeiconified(WindowEvent e)
ウィンドウが最小化された状態から通常の状態に変更されたときに呼び出されます。
void windowIconified(WindowEvent e)
ウィンドウが通常の状態から最小化された状態に変更されたときに呼び出されます。
void windowOpened(WindowEvent e)
ウィンドウが最初に可視になったときに呼び出されます。
最低「これらのメソッドがない」というメッセージがでるはずです。
~~は abstract として宣言する必要があります。~~を ~~で定義しません。
というエラーがそれです。
implements WindowListener やめて、
addWindowListener(this);
を書き換えて、
protected void processWindowEvent(WindowEvent endEvent)
{
System.exit(0);
}
を消して、下記のようにすると閉じられます。
import java.awt.*;
public class TestgFrame extends Frame
{
public TestFrame()
{
setTitle("ふれーむのタイトルだよーん");
//以下略
TestWindowAdapter testWindowAdapter = new TestWindowAdapter();
this.addWindowListener(testWindowAdapter);
}
class TestWindowAdapter extends java.awt.event.WindowAdapter
{
public void windowClosing(java.awt.event.WindowEvent event)
{
event.getWindow().setVisible(false);//イベントのあったフレーム閉じる
event.getWindow().dispose();//イベントのあったフレーム破棄
//System.exit(0); アプレットなのでだめ
}
}
}
なお、アプレットという話ですので、System.exit(0);
にしないほうがよいでしょう。
また、コンストラクタの名前はクラス名と同じにします。
さらにクラス名は大文字で始まるのが規則です。
(上の例ではなおしておきました)
あと、失礼ですが、
フレーム閉じるのにMouseListenerは必要ないですよ…。
老婆心。
これらはすべて入門書にかいてありますので、
一冊本を読むことをお勧めします。
御礼が遅くなりましてすいません。
ご丁寧に教えていただいたおかげでうまく行きました。
私も本を読んで何とかがんばっているのですが、もともとCの知識も
ない上、本を見てもなかなか理解できず本当に苦労しています。
本当に助かりました。どうもありがとうございました。
No.2
- 回答日時:
エラーの原因はimplementsしているインターフェースのせいだと思います。
私が先にのせましたサンプルソースではimplements MouseListenerとなっていますが、
sr20detkさんのほうではimplements WindowListenerになっています。
WindowListenerをimplementsしているのにMouseListenerのメソッドが書いて
あったりするとエラーが出ると思います。
前回のソースはMouseListenerだったのですが、WindowListenerでよいのですか?
(なかなか上手く説明できなくてすみません・・・)
No.1
- 回答日時:
まず最初にprocessWindowEventはJFrame(swing)のメソッドなのでFrameでは
使用できません。(swingについてわからない場合は調べてみて下さいね。)
なのでイベントを利用します。windowClosingはユーザが、ウィンドウのシステムメニューで
ウィンドウを閉じようとしたときに呼び出されます。
とりあえず私はこんな風にしてみました。
class labelFrame extends Frame implements MouseListener {
Label label;
labelFrame(String title) {
super(title);
setLayout(new FlowLayout());
label = new Label("Hello from Java! This is a frame window.");
add(label);
addMouseListener(this);
//↓ここから↓
this.addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(WindowEvent e) {
doWindowClose();
}
});
//↑ここまで↑
}
********(中略)*********
//↓メソッド↓
void doWindowClose(){
this.setVisible(false);
}
//↑メソッド↑
this.setVisible(false);の部分は閉じるのではなく非表示にする意味ですが
前回のソースを見ると切替をsetVisibleでやっていたのでこれにしてみました。
この回答への補足
***********************************************************
frame.java:7: frame は abstract として宣言する必要があります。mouseClicked(jav
a.awt.event.MouseEvent) を frame で定義しません。
class frame extends Frame implements MouseListener
***********************************************************
コンパイル時に上記エラーが出たのですが、内容が理解できず
対処に困っています。
教えていただいた、ソースを記述すると共に、修正しました。中略以外は
(クラス名称の違いを除く)全て同じようなプログラムにはなっています。
他に何かいけない所があるのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- HTML・CSS アコーディオンメニューが思うように動作しません。 1 2023/08/20 16:48
- その他(プログラミング・Web制作) pandasでまとめてインデックスを削除するにはどうすればいいですか? たとえば、以下のプログラムで 1 2022/07/31 23:09
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- HTML・CSS cssの display: flex;で横並びにならずに困ってます 1 2022/12/04 13:18
- オープンソース パイソン、Jupyter Labのインストールができない。 3 2023/04/05 21:57
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- HTML・CSS html cssのmargin 5 2022/12/03 11:04
- HTML・CSS HTMLソースの質問 3 2022/07/28 13:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
eclipseに記述したjavaファイル...
-
【JAVAエラー】互換性のない型...
-
「例外 *** は対応する try 文...
-
<forEach> 内で供給された "ite...
-
【Objective-C】プロパテイにつ...
-
importするには java.io.*; imp...
-
透過GIFの判定の仕方ありますか?
-
本文から指定文字列の抽出
-
Javaを使ってデジタル時計を作...
-
Selenium IDEでexportしたコー...
-
import文はルートクラス指定と...
-
c:importタグ内に、変数をセッ...
-
干支の計算で。。。
-
setAttribute(String, int)は適...
-
javaプログラムの問題です
-
javaで質問です。 文字列2023/2...
-
C言語のポインターに関する警告
-
続・ZZZ,ZZZ,ZZ9形式の金額形式...
-
変数を動的に作るには?
-
IF関数でEmpty値を設定する方法。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
eclipseに記述したjavaファイル...
-
<forEach> 内で供給された "ite...
-
「例外 *** は対応する try 文...
-
importするには java.io.*; imp...
-
Javaを使ってデジタル時計を作...
-
setAttribute(String, int)は適...
-
シャットダウンフックが呼ばれない
-
干支の計算で。。。
-
Selenium IDEでexportしたコー...
-
ColabでのPytorchのエラー
-
文字列を数式に
-
【JAVAエラー】互換性のない型...
-
importとextendsの用い方の違い...
-
Java3Dで横置き円筒体の円筒中...
-
ActionForm form にnullが入っ...
-
HttpClientについて
-
java初心者です。座標取得と図...
-
javaで画像を回転縮小
-
(急募)Javaじゃんけんゲームで
-
生年月日と今日の日付から年齢...
おすすめ情報