• ベストアンサー

作ったアプレットを自動でアプリケーションにする方法

Jビルダーを使えば、(イベント処理の記述などを除いた)JボタンやJラベルなどパーツの配置だけは、コードを読めなくてもUIデザイナにて出来ますよね。 では、そのようにUI行ったパーツの配置を変えずに、アプレットからアプリケーションへとソースを自動で変更する機能はJビルダーにはあるのでしょうか。 条件によって可否が分かれるかも知れませんが、その場合は条件も含めて「こういう場合なら出来る」ということを教えていただけないでしょうか。

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

  • ベストアンサー
  • kacchann
  • ベストアンサー率58% (347/594)
回答No.5

>プロジェクトのタイプの変更前は「my.Applet1」というタイトルのウインドウ これはJBuilderに付属している「AppletTestbed」という名前のアプレットビューワ(閲覧ソフト)のウインドウだね。(※このようにアプレット単体だけで動かすことはできない) このタイトルは、アプレットビューワが勝手につけている。 (※プログラマが自由に変更することができるわけではない) >変更後は「アプレットフレーム」というタイトルに こっちのウインドウは、正真正銘の、「今作ったJavaアプリケーションの」ウインドウ。 JBilderが吐き出したmain()部で frame.setTitle("アプレットフレーム"); という記述行があると思うんだけど、 ここの文字列を変えれば、好きなタイトルにできる。 >これは「アプレットとしてもアプリケーションとしても実行出来るソース」を変更前はアプレットとして、変更後はアプリケーションとして実行 >Main メソッド public static void main(String[] args)   ・・・・ が余分に加わっていました。ここでFrameを扱っている そうそう。 アプレットとして実行した場合は、はじめに、 Webブラウザ(またはアプレットビューワ)が、Appletクラス(を拡張した独自のAppletクラス)のインスタンスを作成し、 次にそのインスタンスのinit()、start()を順に呼び出すのだ。 main()は呼ばれない(※これ重要)。 これに対し、アプリケーションとして実行した場合、 はじめに、main()が呼ばれるだけ。 ----------------------------------------------------- ということは、「既に作ってあるアプレットのソースコードを、どう変えればアプリケーションにすることができるのか」というと、 つまりWebブラウザがやっていることをマネすればよく、 それには、 (1)main()メソッドを記述する (2)main()メソッド内部で、次の処理を自前で書く。  ()フレームを作成する(※たんなる土台)  ()appletクラス(または独自に拡張したappletクラス)のインスタンスを生成  ()フレームにアプレットをはりつける  ()フレームの大きさを設定する  ()appletインスタンスのinit()を呼ぶ  ()appletインスタンスのstart()を呼ぶ  ()フレームを可視化する  ※順番はこのとおりでなくともよい   ----------------------------------------------------- ここでもうひとつ重要なのは、 逆に、このコードをアプレットとして実行させた場合でも、 素直にアプレットとして動く、という点。 ブラウザはmain()を呼ばないので、何ら問題はないのだ。 つまり、アプレットとして起動させようとアプリケーションとして起動させようと、 そのたびにmain()部を削除したり再び書き加えたりする必要はないのだ。 ------------------------------------------------------ この原理を知っていれば、 たとえ、JBulderのアプレットウィザードで、(「スタンドアロンで実行可」にチェックし忘れて、)main()部のコードを書き出させるのを忘れたとしても、あとから自分で上記のようなmain()部の記述を加えればよい。 (※main()部の書き方は決まりきっているので、特に悩まなくてもよい)

tyouji
質問者

お礼

ありました、frame.setTitle("アプレットフレーム"); 気づきませんでした。(^^ゞ ・ブラウザはmain()を呼ばない ・アプリケーションとして実行した場合、 はじめに、 main ()が呼ばれる ・main()でWebブラウザがやっていることをマネる しっかり覚えておきます。 順を追った詳しいご説明により大変勉強になりました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

  • kacchann
  • ベストアンサー率58% (347/594)
回答No.4

No.3のkacchannです。 間違えた。 あれか。 「アプレットからアプリケーションへソースコードを変更する方法」 を聞いているのか。 (※No.3で僕がかいたことは、ソースコード変更ではない) …その機能は、おそらくないと思う。 なんでないかというと、「そうする必要が特にないから」という気がする。 下でも書いたように、 ソースコードは変更しなくても、あらかじめmain()部分にしかるべきコードを書いておくだけで、 (1つのソースコードで)アプレットとしてもアプリケーションとしても動かすようにできるのだ。 (※つねに、ではないが) そのこと・その原理をまず学んでくだされ。 JBuilderがはじめに自動的に吐き出すソースコード見てもいいし。

tyouji
質問者

お礼

詳細なご説明をありがとうございます。 No3のご回答で示していただいた手順を行ってみたところ、プロジェクトのタイプの変更前は「my.Applet1」というタイトルのウインドウが立ち上がっていましたが、変更後は「アプレットフレーム」というタイトルに変わりました。 ボタンなどの配置は同じでした。 ざっと見たところ、No4で仰るようにソースコードは変更されておりませんでした。 これは「アプレットとしてもアプリケーションとしても実行出来るソース」を変更前はアプレットとして、変更後はアプリケーションとして実行したということなのでしょうか? また、「スタンドアロンで実行可」にチェックした場合、しない場合と比べてMain メソッド public static void main(String[] args)   ・・・・ が余分に加わっていました。ここでFrameを扱っているのですね。 参考URLの、アプリケーションとして起動したときの制約の説明、頭の隅に置いておきたいと思います。

全文を見る
すると、全ての回答が全文表示されます。
  • kacchann
  • ベストアンサー率58% (347/594)
回答No.3

あれかな? JBuilderではじめにアプレットのプロジェクト作って、 デザイナでチョロッとボタンとかラベルとか作成して配置して、 で、うまくいった。 じゃあ次は(その作成し配置したたボタンやラベルをそのまま使って)アプリケーションにしたい。 こういうことかな? ---------- う~ん、JBuilder9を見てみたんだけど、「特に単純な方法は用意してない」んじゃないかなー。 ↓どうも、やっかい? ----------------------- (以下はJBuilder9での話) 「ファイル」メニュ->「新規」項目 ->「オブジェクトギャラリ」ダイアログ ->「Web」タグ->「アプレット」アイコンを選択。 これで「アプレットウィザード」が開くよねえ。 アプレットウィザードの最初のページ(「アプレットの詳細」設定)にある、 下のほうのチェックボックス ・「スタンドアロンで実行可」 ・「標準メソッドの生成」 にチェックを入れる。(これ重要) まず、上記のようにしてからアプレット作成に入ろう。 (※余談だが、「スタンドアロンで実行可」にチェック入れた時とそうでないときとのソースコードを見比べてみよ。アプリケーションとアプレットの違いはmain()関数の記述があるかないか、だけ) --------------------------- (で、デザイナでボタンやらラベルやらを好きなように配置して) アプレット実行。うまくいった。 つぎに、これをアプリケーションに変更したい。 そのときは、 「プロジェクト」メニュー -> 「プロジェクトのプロパティ」項目 ->「プロジェクトのプロパティ」ダイアログ ->「実行」タブ ->(右にある4つのボタンのうちの)「編集」ボタン ->「実行時プロパティ」ダイアログ ->「実行」タブの「メインクラス(M):」と書かれたラベルの右のテキストフィールドを見る。 そこに書かれている文字列を覚えておく。 (今は仮に"my.Applet1"と書かれていたとする) ->「OK」ボタン ->再び「プロジェクトのプロパティ」ダイアログ ->(右にある4つのボタンのうちの)「削除」ボタン ->(右にある4つのボタンのうちの)「新規」ボタン ->「実行」タブの「タイプ(T):」と書かれたラベルの右のメニューの中から「アプリケーション」を選択 ->「メインクラス(M):」と書かれたラベルの最右に「…」ボタンがあるのでそれを押す ->「プロジェクトのメインクラスの選択」ダイアログ ->「参照」タブの「クラス名(C):」と書かれたラベルの右のテキストフィールドに、 さっき記憶しておいた文字列(※今回は"my.Applet1")を入力。 ->「OK」ボタン ->「OK」ボタン ->「OK」ボタン ----------------- ※ようはプロジェクトの「タイプ」を変えただけです。 <余談>今回、JBuilder9をダウンロードしてみました。 ライセンスキー(だかファイルだか)を入手するまでの手続きがちょっとメンドクサかった。 デザイナツールって、とっても利口なんですね。ちょっと感動。 ------------------------- ↓必須。 「アプレットをアプリケーションに変換する」と考えるのではなく、 「フレームにアプレットを貼る」。 http://www.sol.dti.ne.jp/~yoshinor/japplication/japp1002.html

全文を見る
すると、全ての回答が全文表示されます。
  • mamakari
  • ベストアンサー率34% (20/58)
回答No.2

JBuilder8SE使ってますが、そんな機能はないと思います。

tyouji
質問者

お礼

ございませんか。ご回答ありがとうございます、参考になりました。

全文を見る
すると、全ての回答が全文表示されます。
  • takaP-
  • ベストアンサー率79% (83/105)
回答No.1

たとえツールを使ってるとしても、Javaを知らない人にやらせるのはどうかと思います。。。 私はJBuilderを使っていませんし、質問の正確な無理ですけどJButtonとかSwingを使用しているという事はJAppletを継承したクラスだと推測します。 それならば、クラス宣言部の「extends JApplet」の部分をJFrameなり(目的によってどれを継承するのかは変わってくるでしょう)何なりに変更した上で。。。 public クラス名() {   init(); } というコンストラクタを追加するだけで構わないのではないでしょうかね。 もしも、継承クラスがJAppletではなくAppletだとしたら、JFrame等ではなく、AWTのFrameなりに変更すれば良いとは思いますが、AWTとSwingの混合は避けるべき事ですので、そもそもの設計自体に問題があったと理解して下さい。

tyouji
質問者

お礼

実のところ私はソースをほとんど読めないのですが、少し読んでみたところ継承しているクラスはAppletクラスでした。 いずれにしても、(J)Frameというウインドウを扱うクラスを継承する方法があるのですね。参考になりました。ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • JAVAアプレット レイアウトの変更

    JAVAアプレットのinit()の部分にラベルやボタンをきれいに設置するためGridLayoutを使って配置したのですが、ボタンを押したあとに今あったGridLayoutの場所の新しいレイアウトで新しいラベルを配置することはできるのでしょうか? 一応アプリケーションの場合は違うコンストラクターの新しいインスタンスを作成してやればいいなとおもったのですがアプレットの場合はどうすればいいのか分からず困っています。 どなたかよろしくお願いします。

  • 波紋JAVAアプレットについて

    どうもです。 とあるオープンソースの波紋系JAVAアプレットをホームページビルダー6.0でHTMLに記述していると、 ホームページビルダー上でのプレビューでは、正常に動作しているのですが、 編集中のそのファイルを保存すると、どういうわけか、 アプレットの記述文字が変わってしまいます。 具体的には以下に挙げるとおりです。 -------------------------- <applet code="DropWater.class" width="任意の数値" height="任意の数値"> <param name="img" value="任意の画像"> <param name="start" value="rrggbb"> <param name="end" value="rrggbb"> </applet> ↑ これならば、正常に動作するのですが、 なぜか、保存すると、 <applet code="/DropWater.class" ↑ DropWaterの「D」の記述の前になぜか/が入力されてしまうのです。 なぜなのでしょう? 当然こうなる事で、ネットに転送したHP上ではJAVAアプレットは機能していません。 何とか、この→「/」を付け加えずに、保存する方法はないのでしょうか? どうやら保存するときに、スペルに補正がかかるような気がするのですが、(すべて大文字なら頭文字だけ大文字に補正される) それのせいなのでしょうか? いずれにせよ、 何が原因なのか、まったくわかりません。 本来ならば、私のHPソースをすべて公開した方がわかりやすいのでしょうが、 それはあまり気が進まないので、 これでお願いできないでしょうか? わかる方がいましたら、ご教授お願いいたします。

  • 他のアプリケーションをクリックしたときのイベントを得る方法

    タイトル通り、他のアプリケーションを左クリックしたときのイベントを得たいのですが、うまくいきません。 具体的には、DirectXを使って動いているフルスクリーンのアプリケーションを左クリックしたときにイベントを得るということです。 http://tokyo.cool.ne.jp/kanain/APIHTM/GetMsg.html こちらで紹介されている方法でVBのフォームを左クリックしたときのイベントは得ることができました。 そして、他のアプリケーションのハンドルを取得して引数に指定してみましたが、うまくいきません。 分かりにくい説明ですみません^^; 何が間違っているのでしょうか。自分なりに作ってみたソースを記述した方がよいでしょうか?また、全く違う方法でも構わないので他のアプリケーションを左クリックしたときのイベントを得る方法がありましたら教えてください。 バージョン:VB6.0

  • アプレットの動作テストができない

    Eclipseのメニュー→「実行」→「Javaアプレット」で、"HELLO"の文字を表示させるアプレットの動作テストしたんですが、エラーが出てしまいました。 エラー内容は以下の通りです。 -------------------------------------- この行に複数マーカーがあります。 - シリアライズ可能クラス Sample_01 は long 型の static final serialVersionUID フィールドを 宣言していません。 - ブレークポイント:Sample_01 ---------------------------------------- HTML上での動作テストは問題なくできるのですが、Eclipseでの動作テストは失敗します。なぜでしょうか? ソースはJava講座のHPの物なので、間違いないと思うのですが…。 //ソース import java.applet.Applet; import java.awt.*; import java.awt.event.*; import java.util.*; public class Sample_01 extends Applet{ //この部分に使用する変数を宣言// public void init(){ //ここで最初にやっておきたい処理を記述する// } public void paint(Graphics g){ g.drawString("HELLO!",200,200);//ここでアプレット画面に表示させる処理を記述する// } }

    • ベストアンサー
    • Java
  • Javaアプレットの初歩の質問

    Visual J++6.0を利用しているのですが、 Hello, Worldをアプレットとして、 ブラウザ(IE7.0)に表示しようとして、デバッグ実行 しようとすると、 「アプリケーションでIEの起動に失敗しました。」 と表示されます。 何らかの設定方法があったり、ソースが間違ってたり するのでしょうか。ちなみに、シンタックスエラーは 無いようです。初歩の質問ですみませんが、 教えていただきたいです。 -------------------------------------------------- [Applet1.java] public class Applet1 extends Applet{ public void init(){ ~ // TODO Graphics g = getGraphics(); // このアプレット用のデバイスコンテキストを取得 g.drawString("Hello World", 50, 50); } ~ }

    • ベストアンサー
    • Java
  • JAVAの表計算アプリ、アプレットのソースコード

    お世話になります。m(__)m 1.基本的な計算(平均値の計算や四則演算くらい)ができる簡易表計算ソフト 2.アプレットかアプリケーションかという違いを除いて、同じ機能を持ったソフト このようなソフトのソースコード達が見たいのですが、ご存知でしょうか。できれば1,2の条件とも同時に満たしているものがいいのですが・・・・・・(^^ゞ

    • ベストアンサー
    • Java
  • Javaアプレットのズームインズームアウトについて

    質問させていただきます。 結論から言うと 「Javaアプレットにおいてマウスホイールを使ってのズームインズームアウトは可能か。」 ということです。 今Javaアプレットでオセロゲームをつくっているのですが ウィンドウが開き、その中のViewをマウスホイールでズームインズームアウトしたいと思っています。 しかし、調べてみてもなかなか求めているような参考サイトを見つけられません。 (MouseWheel イベント、MouseWheel クラスなど調べました。) そこでもしわかる方がいれば下記のことを教えていただけないでしょうか? ・そもそもJavaアプレットにおいてマウスホイールを使ってのズームインズームアウトは可能か。 ・もし可能なのであれば、どのようにソースコードを記述するとそれを実現することができるのか。 (下記サイトのオセロゲーム以外のソースコードでも全然構いません。できるのであれば何でも。) ・またそれに関した参考サイトのURL。 ・その他、気づいた点やきっかけとなるヒント等 諸々。 このサイトのソースをそのまま使っています。 http://ext-web.edu.sgu.ac.jp/nikku/nikkunisemi/nikkunisotuken2003/03_study/03_product/03_nishiduka/java4_3.html ソースを貼ろうとしましたが、字数オーバーのため載せることができません。 試していただける方がいるのであれば、上記サイトを参考にしてもらえれば幸いです。 根本的な質問としてはJavaアプレット全般のため他のアプリのソースコードを教えて頂いても全然構いません。 周りの方や知識人に聞いても誰もわかりませんでした。わかる方がいたら教えてください。 お願い致します。助けてください。 初めての書き込みのため拙い部分もあるかもしれませんがよろしくお願いします。

    • ベストアンサー
    • Java
  • アクセス+vb 複数コントロールに同じ処理する場合

    アクセス+VBです。 空のフォームにラベルを複数ランダムに配置します。(多ければ500個くらい) そのラベルにクリックイベントを発生させて処理させる場合、ラベルの数だけイベント処理を書かなくてはいけませんよね。 もし、処理内容が同じならひとつの処理記述ですませる方法はないですか。 例えば学校の教室だとすれば、ラベルを机の代わりにしてフォームに配置します。 ラベル(机)をクリックしたら、その生徒のデータが表示される。 良い方法はないでしょうか?

  • AWTのアプレットにおいてのイベント処理

    javaのAWTでアプレット作成をしているのですがイベント処理部分をどう記述したらいいか解りません。 組み込みたいイベント処理は 1、アプレット起動時に「単語<tab>数字:数字,数字:数字,.......」という形のデータが入っているファイルを読み込んで数字列が一番多い単語(ただし二字熟語~四字熟語)を多い順に9つのボタンのラベルに格納していく。(どの位置のボタンのラベルに格納するかは自由) 2、ボタンを押すと1に書いているファイルを読み込みボタンのラベルに対応した数字列を見つけそれをテキストフィールドに全て出力させる。 ヒントだけでも宜しければ教えてください。お願いします。 /*<HTML> <BODY> <APPLET CODE="Tagcloud.class" WIDTH=400 HEIGHT=350> </APPLET> </BODY> </HTML>*/ //java.appletパッケージをimport宣言 //java.awtパッケージもimport宣言 import java.applet.*; import java.awt.*; import java.awt.event.*; public class Tagcloud extends Applet implements ActionListener{ //AWTのGUIコンポーネントクラスの作成 Button bu1 = new Button(""); Button bu2 = new Button(""); Button bu3 = new Button(""); Button bu4 = new Button(""); Button bu5 = new Button(""); Button bu6 = new Button(""); Button bu7 = new Button(""); Button bu8 = new Button(""); Button bu9 = new Button(""); TextField tf=new TextField(20);//テキストフィールド public void init(){ setBackground(new Color(0,190,221)); //レイアウトを自由に変更 setLayout(null); //アプレット領域にGUIコンポーネント(部品)の追加(載せる) add(bu1); add(bu2); add(bu3); add(bu4); add(bu5); add(bu6); add(bu7); add(bu8);   add(bu9);   add(tf); //コンポーネントの配置 bu1.setBounds(50,50,80,20); bu2.setBounds(150,50,80,20); bu3.setBounds(250,50,80,20); bu4.setBounds(50,120,80,20); bu5.setBounds(150,120,80,20); bu6.setBounds(250,120,80,20); bu7.setBounds(50,190,80,20); bu8.setBounds(150,190,80,20); bu9.setBounds(250,190,80,20); tf.setBounds(50,250,250,20); //ボタンにActionListenerを登録します。 bu1.addActionListener(this); bu2.addActionListener(this); bu3.addActionListener(this); bu4.addActionListener(this); bu5.addActionListener(this); bu6.addActionListener(this); bu7.addActionListener(this); bu8.addActionListener(this); bu9.addActionListener(this); tf.addActionListener(this); } public void actionPerformed(ActionEvent e){ //ここにイベント処理をする部分を記述 } }

  • fvwmでウィンドウを自動的に配置する方法

    質問します。 ウィンドウマネージャ"fvwm"で、自動的にGUIアプリケーションを配置する方法を探しています。 条件として、複数のGUIアプリケーションを起動した際に、ウィンドウを重ねずに表示させたいです。どうしてもウィンドウが重なる場合は、重ねる部分を可能なかぎり少なくしたいです。 RandomPlaecementとSmartPlacementを使用してみましたが、ウィンドウを重ねて表示する場合に、ウィンドウの重なった部分が大きいので使用できません。 どなたか解決策をご存知ないでしょうか。 お知恵をお貸しください。