halohalolin
あなたも質問に答えられます!
ウォッチリストに追加
- 状態:終了
- 回答数:2 / 5件
- 回答ポイント:70ポイント
- 登録:2009-04-04 04:00:47
- 終了:2009-04-10 10:21:02
- カテゴリー:
コンピュータ
ウェブ制作
質問者さんは Applet でも Application でも動作するように作成したいのですよね?
http://www.asahi-net.or.jp/~dp8t-asm/java/tips/AppletApp.html
が参考になると思います。
tsukasa57さんありがとうございます。
今回は、Applicationからのみ動くのでも良いかなと思っていたのですが、リンク先の内容は参考になりそうです。
試してみます。
2
回答者:
bufferings
2009-04-06 00:14:06
満足!
35ポイント
色んな方法がありますけど、ここで一番分かりやすいのは
コメントに書いてあるコードのmainを生成用のstaticメソッドにすることですかね。
public class hatena1238220283 extends Applet { public static Applet create(String title, int width, int height) { Frame f = new Frame(title); Applet a = new hatena1238220283(); f.setSize(width, height); a.init(); f.add(a); f.setVisible(true); f.addWindowListener(new ExitListener()); return a; } 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); } }
で、呼び出し側は
public class Main { public static void main(String[] args) { String title = "<Windowタイトル名>"; int width = 400; int height = 200; Applet myApplet = hatena1238220283.create(title, width, height); } }
bufferingsさんありがとうございます。
bufferingsさんの方法そのもので行う場合ですと、別のプログラムでこのライブラリを使う場合にApplet a = new hatena1238220283(); の部分など毎回書き換えが必要な部分が発生しますね。
でも、アレンジすれば色々活用できそうなので試してみます!
おとなり質問
- アプリケーションを開くと、太文字箇所が□(四角)に文字化けしてて何がかいてあるのか分からない状態です。どのアプリケーションを開いてもこの現象は起きてい..
5 - Webページを表示するために、IEを普通の方法で起動し表示した場合と(ファイルを表示する)エクスプローラのアドレスバーにURLを入力して起動した場合の違いは何..
2 - Real Playerのアプリケーションが急に動作しなくなりました。環境はMac OS10.2.8です。 今日の日付けで「RealPlayer.crash.log」というファイルが出来ているのが..
1 - 設問数30 回答数1000程度のアンケートを実施したいと思い、アンケートの作成と集計ができるツールを探しています。条件は下記です 1. サーバに設置できるcgiのよ..
5 - iPhone3Gのアプリケーションで、設定の方法がよく分からないものが二つあります。 まず、RemoteというiTunesの曲をリモコン的にWiFi経由で操作するやつです。 こ..
1 - Internet Explorerでファイルを複数ダウンロードしたいのですが,ダウンロード状況を示すダイアログが2つ出た段階で,3つ目のダウンロードができません.IEを使..
3 - ウィンドウズのXPを98に戻したいのですが、メール機能やファイルカクシュアプリケーションを保存したまま、OSの変更を行うことは可能でしょうか。バージョ..
5 - アップルの音楽ソフトiTunesとiPodが一体どれくらい使われているのか知りたいです。 以下のようなことがわかるサイトを教えてください。 ・iTunesの”アプリケー..
2 - アプリケーションのウィンドウサイズを調整するアプリケーションがあれば教えてください。 いくつかの規定値が設定されているものや、自分のお気に入りのサイズ..
5 - Last.fmについて。 私のPC環境はMac OS 10.4です。 10.4のLast.fmはベータで配布されていますが、そのベータをインストールしても使用できません。 アプリケーシ..
5
この質問・回答へのコメント
ライブラリ化する前のサンプルコードは以下の通りです。
<始まり 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);
}
}
<終わり>
よろしくお願いします。
<始まり 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);
}
}
<終わり>
よろしくお願いします。
あら。
質問の意図を理解できていないようです。
見当違いですみません。
僕が勘違いをしていると思うので
もしよかったら
・ライブラリ化したいコード
・ライブラリを使うコード
をどういう感じにしたいのかを
もう一度だけ詳しく教えていただいてもよろしいですか?
コンパイルできない状態で構いません。
質問の意図を理解できていないようです。
見当違いですみません。
僕が勘違いをしていると思うので
もしよかったら
・ライブラリ化したいコード
・ライブラリを使うコード
をどういう感じにしたいのかを
もう一度だけ詳しく教えていただいてもよろしいですか?
コンパイルできない状態で構いません。
bufferingsさん、何度もつきあっていただいてありがとうございます。
ライブラリ化したいコードについてですが、
今Javaアプリケーションとして動作する簡単なゲームを作りたいと
考えています。
で、基礎的な所をしっかり押さえる力をつけていきたいと考えているので
ゲーム向けの画像やキー入力・音声を制御するライブラリも自分なりに
一緒に作っていきたいと考えています。
※で、そこで作ったライブラリは次回以降使い回しができるようにしたいと
考えています。
とはいえ、最初の表示初期化部分で「ライブラリとして」どう書くのか詰まってしまい
試行錯誤している段階です。
初期の問題だけをとりあげてみようと上記コメントのコードをあげてみました。
bufferingsさんのコードの場合、呼び出し元のmain以降は全ての処理を
ライブラリに丸投げして完結されています。
が、ゲームの場合描画部分などはケースバイケースで異なると思うので、
paint()は呼び出し元で制御するように改造する必要があるかなという印象を受けました。
また、ライブラリ自体を毎回使うたびにソースを呼び出し元に合わせて
改造する必要があるのはスマートではないなという印象があるので
この辺りもなんとか自分で考えてみる必要があるなという感想を持ちました。
※コード例をご希望との事でしたが、ちょっとライブラリ&サンプルコードが
まだお見せできる状態になっていないので、お手数ですがちょっと話をそらさせていただきました。
よろしくお願いします。
ライブラリ化したいコードについてですが、
今Javaアプリケーションとして動作する簡単なゲームを作りたいと
考えています。
で、基礎的な所をしっかり押さえる力をつけていきたいと考えているので
ゲーム向けの画像やキー入力・音声を制御するライブラリも自分なりに
一緒に作っていきたいと考えています。
※で、そこで作ったライブラリは次回以降使い回しができるようにしたいと
考えています。
とはいえ、最初の表示初期化部分で「ライブラリとして」どう書くのか詰まってしまい
試行錯誤している段階です。
初期の問題だけをとりあげてみようと上記コメントのコードをあげてみました。
bufferingsさんのコードの場合、呼び出し元のmain以降は全ての処理を
ライブラリに丸投げして完結されています。
が、ゲームの場合描画部分などはケースバイケースで異なると思うので、
paint()は呼び出し元で制御するように改造する必要があるかなという印象を受けました。
また、ライブラリ自体を毎回使うたびにソースを呼び出し元に合わせて
改造する必要があるのはスマートではないなという印象があるので
この辺りもなんとか自分で考えてみる必要があるなという感想を持ちました。
※コード例をご希望との事でしたが、ちょっとライブラリ&サンプルコードが
まだお見せできる状態になっていないので、お手数ですがちょっと話をそらさせていただきました。
よろしくお願いします。
丁寧に説明してくださってありがとうございます。
なるほど。
http://q.hatena.ne.jp/1238220283#a907075
のtsukasa57さんの回答がそのものって感じですかね。
[ライブラリ側その1]
MyAppletBase.java
アプレットクラスの処理で共通化しておきたいものをここに書いておきます。
public class MyAppletBase extends Applet {
public void init() {
setBackground(new Color(0.8F, 1.0F, 1.0F));
}
public void paint(Graphics gc) {
gc.drawString("Hello, world!", 10, 16);
}
}
[ライブラリ側その2]
MyAppletUtil.java
MyAppletBaseに入れてもよかったんですけど。分けた方が分かりやすいかなと思ったので分けてみました。appletをパラメータで受け取って、それを使います。
public class MyAppletUtil {
public static void showApplet(Applet applet, String title, int width,
int height) {
Frame f = new Frame(title);
f.setSize(width, height);
applet.init();
f.add(applet);
f.setVisible(true);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
これで
public static void main(String[] args){
MyAppletUtil.showApplet(new MyAppletBase(), "MyAppletBase", 200, 100);
}
で呼び出せば、HelloWorldが表示されます。
[ライブラリの拡張]
MyApplet2.java
public class MyApplet2 extends MyAppletBase {
public void paint(Graphics gc) {
gc.drawString("Hello, MyApplet2!", 10, 16);
}
}
これで、
public static void main(String[] args) {
MyAppletUtil.showApplet(new MyApplet2(), "MyApplet2", 100, 200);
}
で呼び出せば、HelloMyApplet2が表示されます。
・・・こういうことかなぁと思うのですが。
またはずしてたらすみません。
なるほど。
http://q.hatena.ne.jp/1238220283#a907075
のtsukasa57さんの回答がそのものって感じですかね。
[ライブラリ側その1]
MyAppletBase.java
アプレットクラスの処理で共通化しておきたいものをここに書いておきます。
public class MyAppletBase extends Applet {
public void init() {
setBackground(new Color(0.8F, 1.0F, 1.0F));
}
public void paint(Graphics gc) {
gc.drawString("Hello, world!", 10, 16);
}
}
[ライブラリ側その2]
MyAppletUtil.java
MyAppletBaseに入れてもよかったんですけど。分けた方が分かりやすいかなと思ったので分けてみました。appletをパラメータで受け取って、それを使います。
public class MyAppletUtil {
public static void showApplet(Applet applet, String title, int width,
int height) {
Frame f = new Frame(title);
f.setSize(width, height);
applet.init();
f.add(applet);
f.setVisible(true);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
これで
public static void main(String[] args){
MyAppletUtil.showApplet(new MyAppletBase(), "MyAppletBase", 200, 100);
}
で呼び出せば、HelloWorldが表示されます。
[ライブラリの拡張]
MyApplet2.java
public class MyApplet2 extends MyAppletBase {
public void paint(Graphics gc) {
gc.drawString("Hello, MyApplet2!", 10, 16);
}
}
これで、
public static void main(String[] args) {
MyAppletUtil.showApplet(new MyApplet2(), "MyApplet2", 100, 200);
}
で呼び出せば、HelloMyApplet2が表示されます。
・・・こういうことかなぁと思うのですが。
またはずしてたらすみません。
bufferingsさん何度もつきあっていただいて本当にありがとうございます。
申し訳ない事にまだtsukasa57さんの回答もふくめて自分なりの検証ができていないのですが
大変参考になりそうです。
大感謝!
申し訳ない事にまだtsukasa57さんの回答もふくめて自分なりの検証ができていないのですが
大変参考になりそうです。
大感謝!
今更ながら最初の最初で行き詰まっていた自作のライブラリにbufferingsさんやtsukasa57さんの方法を適応してみました所、エラーが全部消えて動き出しました!
だからといってまだ殆ど作り込んでいないので動かないのですが、助かりました。
ありがとうございます!!
だからといってまだ殆ど作り込んでいないので動かないのですが、助かりました。
ありがとうございます!!

