アプレット10日目アプレット - もやしもん 君にも見える菌 細菌 ウィルス 微生物
アプリケーション作成と同時にアプレットも完成させる
アプリケーションを作成するにつき、main関数以下に各種クラスを配して作成する。そのままの構成でアプレットとしての準備を終えてしまいたい。
GNU General Public License, Version 2に則り、ソース公開されているグラフ理論用アプリケーション
http://www.eng.auburn.edu/department/cse/research/graph_drawing/graph_drawing.html
に使用されている方法を参考に、以下のようなアプレット・アプリケーション行ったり来たりのテンプレートを作成した。末尾にHTMLソースとJava classソースを示すが、構成は以下の通り。
- HTML内に呼び出すべきclassを指定
- 呼び出されるクラスは、appletのEXTENDSクラスとして作るのでアプレットとして動く
- しかし、このクラスはmain関数を有し、Javaアプリケーションとしての体裁を有する
- ただし、その冒頭で、実行がアプリケーションとしてなされるか、そうでないかを決めるためのboolean変数
- private boolean isApp_ = false;//もしくはtrue
を使い、以降のapplet処理init(){}内の動作をisApp_で選択できるようにする。
- クラスのmain関数はアプリケーションとして動作するときに動き始めるが、その中で、このクラスinit()を呼び出すことで、アプレットと動く場合と以降の動きが同様になるような流れとしてある。
- この例では、アプレットとして起動すると、Exitボタンなしで起動する。「これはアプリ開始ボタン」を押すと、表示欄が変化する。
- アプレットとして起動すると、Exitボタンつきで起動し、このボタンにより、アプリケーションは終了する。また、。「これはアプリ開始ボタン」を押すと、表示欄が変化する。
以下、2つのソース。
- HTML
<h2>Applet/Application使いまわし用HTML</h2> <hr> 以下のタグ部分でapplet用クラスの呼び出し</p> <APPLET CODE = "appletTest.class" WIDTH=500" HEIGHT ="500"> <br><br>Your browser will not execute VGJ. You need a JAVA-capable browser. </applet> <hr> <h3>あとがき</h3> </p>
- ここで呼び出しているappletTest.classのソース
/* * 作成日: 2005/06/26 * * TODO この生成されたファイルのテンプレートを変更するには次へジャンプ: * ウィンドウ - 設定 - Java - コード・スタイル - コード・テンプレート */ /** * @author * * TODO この生成された型コメントのテンプレートを変更するには次へジャンプ: * ウィンドウ - 設定 - Java - コード・スタイル - コード・テンプレート */ import java.applet.Applet; import java.awt.Graphics; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class appletTest extends Applet { Button btnClick,btnAPPLI,btnEXIT,btnAPPLI2; TextField txtA,txtAnswer; Label MyLabel; private boolean isApp_ = false; //private boolean isApp_ = true;
public void init(){ if(isApp_) { btnAPPLI = new Button("これはアプリ開始ボタン"); add(btnAPPLI); btnAPPLI2 = new Button("これはアプリケーションです"); add(btnAPPLI2); btnEXIT = new Button("これはアプリ終了ボタンExit"); add(btnEXIT); } else { //setLayout(new GridLayout(1,1)); btnAPPLI = new Button("これはアプリ開始ボタン"); add(btnAPPLI); btnAPPLI2 = new Button("これはアプレットです"); add(btnAPPLI2); } btnClick = new Button("testボタン"); txtA = new TextField("0",3); txtAnswer = new TextField("0",5); add(btnClick); add(txtA); add(txtAnswer); MyLabel = new Label(" 表示欄 "); add(MyLabel);
btnClick.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){ int intAnswer = Integer.parseInt(txtA.getText()) + Integer.parseInt(txtA.getText()); txtAnswer.setText(Integer.toString(intAnswer)); } }); }
public static void main(String args[]) { Frame frame = new Frame("test"); appletTest vgj = new appletTest(); vgj.isApp_ = true; vgj.init(); vgj.start();
frame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e) { System.exit(0); } }); frame.add("Center", vgj); frame.resize(500, 500); frame.validate(); frame.show(); }
public boolean action(Event event, Object what) { if(event.target instanceof Button) if(((String)what).equals("これはアプリケーション終了ボタンExit")) { System.exit(0); } else if(((String)what).equals("これはアプリ開始ボタン")) { MyLabel.setText("appLIボタン"); } return super.action(event, what); } }