Javaアプリケーションの開発においてリフレクション処理を含むライブラリ例としてシンプルなソースを提供して下さっているサイトをご存知の方はいらっしゃらないでしょうか?(もしくは直接教えてください)

Applet上で描画処理をしたり、キー入力を行うライブラリを勉強がてら作ろうと思ったのですが、Frame・Appletの初期化部分を書こうとしたときやキーの割り込み等を行うため、ライブラリ呼び出し元の情報を取得しようとしたのですが、記述の仕方がどうもよくわかりません。

↓下記のようなソースを、ライブラリ上へ移行させたいのです。
public static void main(String[] args) {
Frame f = new Frame("test.");
Applet a = new Frametest();
f.setSize(200, 100);
f.add(a);
f.setVisible(true);
f.addWindowListener(new ExitListener());
}

いくつかソース付きゲーム向けのライブラリを試しにダウンロードしたのですが、完成しすぎていてどこが何の処理をしているのか今の所ソースを読んでも理解できませんでした。
よろしくお願いします。

回答の条件
  • 1人2回まで
  • 登録:2009/03/28 15:04:45
  • 終了:2009/04/04 03:43:10

回答(3件)

id:uehaj No.1

uehaj回答回数158ベストアンサー獲得回数152009/03/29 21:33:35

ポイント20pt

ちょっとわからないのですが、まずAppletの初期化はmain()メソッドでは駄目です。

init()メソッドを用います。

id:halohalolin

uehajさんありがとうございます。

わかりにくくてお手数をおかけしています。

質問の文字数制限にひっかかるかもしれないと思ったので、ソースコードから、init()とかpaint()とかExitListenerクラス(終了処理)といった記述は省略しています。

で、FrameとかAppletやaddWindowListenerなどといった記載を、上記のソースではmain()メソッド内にて行っていますが、これを自分で作成するライブラリ内へ記載します。

そうすることで、main()から自作ライブラリを呼び出すだけで、その辺りの処理(あと+キー入力イベントも)をまとめてこなすようなものを作成したいと考えていますがどう組めば良いのでしょうか?。

よろしくお願いします。

2009/03/29 23:20:19
id:hijk05 No.2

hijk05回答回数1307ベストアンサー獲得回数232009/03/30 07:19:38

ポイント20pt

だから、アプレットではmainになにをかいても実行されないんだって、回答者1は言ってる。

実際そうです。

id:halohalolin

hijk05さんありがとうございます。

では、最初の質問にinit()などの記述を付け加えたものの例を↓下記とします。

※元のソースのFrametest部分は、hatena1238220283に直しました。

※a.init();行も追加しました

<始まり hatena123822028.java>

import java.applet.*;

import java.awt.*;

import java.awt.event.*;

public class hatena1238220283 extends Applet{

public static void main(String[] args) {

Frame f = new Frame("test.");

Applet a = new hatena1238220283();

f.setSize(200, 100);

a.init();

f.add(a);

f.setVisible(true);

f.addWindowListener(new ExitListener());

}

public void init() {

setBackground(new Color( 0.8F, 1.0F, 1.0F));

}

public void paint(Graphics gc) {

gc.drawString("Hello, world!", 10, 16);

}

}

class ExitListener extends WindowAdapter {

public void windowClosing(WindowEvent e){

System.exit(0);

}

}

<終わり>

↑上記のプログラムを javac から実行すると水色の背景に「Hello, world!」と書かれたウィンドウが表示されます。

で、本題ですが、次回以降製作する際にmain部分やinit()部分・windowClosingなどは、毎回同じ処理になると思うので、外部化してimportで呼び出す自作ライブラリとしてまとめたいのです。

例えば、上記のプログラムにおける hatena1238220283クラスの中身は

public class hatena1238220283 extends Applet{

public static void main(String[] args) {

Syokika = new Syokika("<Windowタイトル名>", <Window横幅>, <Window縦幅>);

}

public void paint(Graphics gc) {

gc.drawString("Hello, world!", 10, 16);

}

}

ぐらいにまで省略できるようにしたいのです。

ですが、自分でこのライブラリを作ってみた際には、Applet a = new hatena1238220283(); のhatena1238220283()部分には何を記載すればいいのか?

その関係でか、無理やりコンパイルできるように直した物の、表示がおかしかったり終了イベントが正常に働かなかったりして、上手くいかないので相談させていただきました。

宜しくお願いします。

2009/03/30 11:07:25
id:tsukasa57 No.3

tsukasa57回答回数110ベストアンサー獲得回数202009/04/01 15:57:04

ポイント40pt

> 次回以降製作する際にmain部分やinit()部分・windowClosingなどは、毎回同じ処理になると思うので、外部化してimportで呼び出す自作ライブラリとしてまとめたいのです。

というのが質問者さんの本当に行いたいことであれば、まず、Applet を継承したクラス(例えば AppletBase.java とか)を作って、そこに、「毎回同じ処理」になる部分を書きます。AppletBase.java は任意のパッケージにおいておきます。

そして AppletBase.java と機能的に差分になるクラス(Sample.java)を作ります。Sample.java は AppletBase.java を拡張したクラスとします。Sample.java は AppletBase.java の属するパッケージである必要はありません。

このようにしておけば、Sample.java が Applet のクラスであることには違いないので、Applet として動作します。

尚、Applet は main メソッドから起動しませんが、Applet に main メソッドが存在してはいけないという制限はないので、スタンドアローンアプリケーション/Applet の何れでも動作させることは可能です。

というわけで、リフレクションを使う必要はないと思うのですがどうでしょうか?

id:halohalolin

tsukasa57さんありがとうございます。

ただ、上手く組めないものでクレクレで恐縮ですが、具体的なソース例を頂けないでしょうか?

よろしくお願いします。

2009/04/03 15:01:18
  • id:halohalolin
    終了時間が近づいてきたので、いったん質問を打ち切って再度投稿をし直します。
    ご返答していただいた方ありがとうございます。
  • id:halohalolin
    この質問の続きを、http://q.hatena.ne.jp/1238785243 に用意しました。
    よろしくお願いします。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません