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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
importするには java.io.*; imp...
-
eclipseに記述したjavaファイル...
-
Java での グローバルIP取得
-
Selenium IDEでexportしたコー...
-
ループ処理の際、最後だけ","を...
-
JSPやサーブレットでSystem.out...
-
System.err. printlnとSystem.o...
-
C言語のポインターに関する警告
-
ダブルクォーテーションのrepla...
-
hiddenの値が期待した値で取得...
-
SwingでJtableのヘッダ行が表示...
-
javaで質問です。 文字列2023/2...
-
ORA-01858: 数値を指定する箇所...
-
strcmp関数などでの複数の文字...
-
逆コンパイルの見方について(...
-
EXCEL VBA で、0から?1から?
-
変数を動的に利用するには?
-
Javaでカレントディレクトリを...
-
No such validation エラー
-
ダブルクォーテーションを含む...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
eclipseに記述したjavaファイル...
-
「例外 *** は対応する try 文...
-
Selenium IDEでexportしたコー...
-
ColabでのPytorchのエラー
-
setAttribute(String, int)は適...
-
Javaを使ってデジタル時計を作...
-
<forEach> 内で供給された "ite...
-
importするには java.io.*; imp...
-
importとextendsの用い方の違い...
-
do while文のエラー??
-
javaで警告音
-
ActionForm form にnullが入っ...
-
(急募) Java (CSVをしよう)一...
-
文字サイズが可変のラベル
-
JavaアプリでWWWサーバにアクセ...
-
生年月日と今日の日付から年齢...
-
正規表現について
-
import 文
-
Androidで画面遷移ができません.
-
【JAVAエラー】互換性のない型...
おすすめ情報