[戻る]
---各種文字列のコードを確認する。
//各種文字列のコードを確認する。最初はJavaのデフォルト
/* */
import java.awt.*;
import java.awt.event.*;//ActionListener利用
import java.applet.*;
import java.net.*; //URL使用のため
import java.io.*; //InputStreamなどのため
public class applet50 extends Applet implements ActionListener,ItemListener {
TextField txt;//入力文字列用
Choice cho = new Choice(); //選択メニュー管理
String item[] = {"Shift_JIS","ISO-8859-1","ISO-2022-JP","JIS0201","EUC-JP","UnicodeBigUnmarked", "UTF-16","UTF-16BE","UTF-16LE","UTF-8"};
Button btn; //変換ボタン用
Label lbl; //ラベル管理用
String selectItem = null;
//JavaのStringは、Unicodeで管理されている。つまり1文字2Byte
//ソースプログラムから翻訳の時に、Unicodeへ変換される。また、Stringコンストラクタでbyte配列を使う時に変換される。
//逆に、文字列ストリーム出力時に、JVMのシステムが動いているSystemに合う文字列へ変換される。StringのgetByteメソッドで指定コード並びへ変換可能
//先頭の文字をコードで表す文字列に変換する。その場合のエンコード方法は、selectItemに従う。
String getCodeString(String s) throws Exception {
int len; //全体の長さ
String first="",second="";
byte bs[];
try {
if(selectItem == null){
bs = s.getBytes(); //デフォルトで、使用したいるOSに依存
} else {
bs = s.getBytes(selectItem);//指定のcharset文字列でデコードされる。
}
first = "00" + Integer.toHexString(bs[0]);
len = first.length();
first = first.substring(len-2,len);
if(bs.length >= 2){ //2byteコード
second = "00" + Integer.toHexString(bs[1]);
len = second.length();
second = second.substring(len-2,len);
return "[" + first + ":" + second + "]";
} else { //1byteコード
return "[" + first + "]";
}
}
catch(Exception e){
throw e;
}
}
void 文字列をコード列へ変換(){
try {
String str = txt.getText();
String s = "";
int len = str.length();
for(int i = 0; i < len; i++){
s += getCodeString(str.substring(i,i+1));
}
lbl.setText(s);
}
catch(Exception e){
lbl.setText(e.toString());
}
}
public void init(){//アプレットがロードされた時に呼ばれる。
setLayout(new BorderLayout());
add(txt = new TextField("abcABC123あいう",50),BorderLayout.NORTH);
for(int i = 0;i < item.length; i++){
cho.add(item[i]);//選択項目文字列を、配列より追加
}
add(cho,BorderLayout.CENTER);
cho.addItemListener(this);//リスナーを登録
add(btn = new Button("先頭文字のコード表示"),BorderLayout.EAST);
add(lbl = new Label(" "),BorderLayout.SOUTH); //ラベルを生成
btn.addActionListener(this);
文字列をコード列へ変換();
}
public void actionPerformed(ActionEvent e){ //送信ボタン処理
文字列をコード列へ変換();
}
public void itemStateChanged(ItemEvent e){//選択項目変更
//選択項目の文字列取得
selectItem = cho.getSelectedItem();
}
}
[戻る]
--farame51 URL(Uniform Resource Locator)クラスを調べる。
//これは、World Wide Web の参照位置を表現するクラスなので、指定のHTMLの情報を取得する時に使える。
//シフトJISコード Shift_JIS
//EUCコード EUC-JP
//JISコード ISO2022-JP
//Classオブジェクトを獲得する方法は次の3通り!
//http://www.asahi-net.or.jp/~dp8t-asm/java/tips/HowToGetClass.html
//アプレットでat java.security.AccessController.checkPermission(AccessController.java:401)
//ObjectのgetClassメソッド
//ClassのforNameメソッド
//クラス名.class
/* */
import java.awt.*;
import java.awt.event.*;//WindowEvent利用
//import java.applet.*;
import java.net.*; //URL使用のため
import java.io.*; //InputStreamなどのため
public class frame51 extends Frame {
TextArea txt; //各種情報を表示させるのに使う。
URL url;//取得リソースを管理させるurl
public static void main(String argv[]){
new frame51();
}
public frame51(){//コンストラクタ
setTitle("指定のリソースを取得");
init();
setSize(400,200);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e){
frame51.this.dispose(); //破棄
}
});
show();
}
public void init() {
BufferedReader reader; //文字、配列、行をバッファリング読み取り用
setLayout(new BorderLayout());
add(txt = new TextArea(),BorderLayout.CENTER);//デフォルトの中央(BorderLayout.CENTER)に設定
try {
//url = new URL("http://yuu7777.fc2web.com/applet/javatext.html");//appletの時、このクラスをロードした以外のサーバーから取得するのは不可
//url = new URL(this.getDocumentBase(),"javatext.html");//appletなら可能
//url = frame51.class.getResource("javatext.html");
url = this.getClass().getResource("javatext.html");
}
//catch(MalformedURLException e){
catch(Exception e){
txt.append("文字列に指定されたプロトコルが未知である!"); //エラーメッセージ
return;
}
try {
InputStream is = url.openStream();//バイト入力ストリーム;
InputStreamReader isr = new InputStreamReader(is,"Shift_JIS"); //バイトストリームから文字ストリーム
reader = new BufferedReader(isr);//バッファリング読み取り用
while(reader.ready()){ //読み取り可能の間
String s = reader.readLine();//一行読み取る。
txt.append(s+"\n");
}
}
catch(IOException e){
txt.append("入出力例外"); //エラーメッセージ
return;
}
}
}
[戻る]
---applet52 サウンドを鳴らす実験
/* */
import java.awt.*;
import java.awt.event.*;//ActionListener利用
import java.applet.*;
import java.net.*; //URL使用のため
public class applet52 extends Applet implements ActionListener {
Button btn0,btn1,btn2,btn3,btn4,btn5; //ボタン
public void init(){//アプレットがロードされた時に呼ばれる。
add(btn0 = new Button("getDocumentBase()利用-相対パスtest.wavを取得して鳴らす"));
add(btn1 = new Button("getDocumentBase()利用-相対パスtest.auを取得して鳴らす"));
add(btn2 = new Button("getDocumentBase()利用-絶対パスtest.auを取得して鳴らす"));
add(btn3 = new Button("絶対パス接生成URLからgetAudioClipでtest.auを取得して鳴らす"));
add(btn4 = new Button("絶対パス接生成URLからgetContentでtest.auを取得して鳴らす"));
add(btn5 = new Button("getDocumentBase()利用-相対パスtest.midを取得して鳴らす"));
btn0.addActionListener(this);
btn1.addActionListener(this);
btn2.addActionListener(this);
btn3.addActionListener(this);
btn4.addActionListener(this);
btn5.addActionListener(this);
}
public void actionPerformed(ActionEvent e){ //ボタン処理
URL url;
AudioClip audioClip = null;
try {
Object btn = e.getSource(); //イベント発生オブジェクト取得
if(btn == btn0){
url = new URL(getDocumentBase(), "test.wav");
audioClip = this.getAudioClip(url);
} else if(btn == btn1){
url = new URL(getDocumentBase(), "././test.au");
audioClip = this.getAudioClip(url);
} else if(btn == btn2){
url = new URL(getDocumentBase(),"http://yuu7777.fc2web.com/applet/test.au");
audioClip = this.getAudioClip(url);
} else if(btn == btn3){
url = new java.net.URL("http://yuu7777.fc2web.com/applet/test.au");
audioClip = this.getAudioClip(url);;
} else if(btn == btn4){
url = new java.net.URL("http://yuu7777.fc2web.com/applet/test.au");
audioClip = (AudioClip) url.getContent();
} else if(btn == btn5){
url = new java.net.URL(getDocumentBase(), "test.mid");
audioClip = (AudioClip) url.getContent();
}
if(audioClip != null) {
audioClip.play();
this.showStatus("audioClipを再生");
} else {
this.showStatus("audioClipがnull: 取得失敗");
}
}
catch (MalformedURLException e2) {
this.showStatus(e2.toString());;
}
catch (java.io.IOException e2) {
this.showStatus(e2.toString());;
}
catch (Exception e2) {
this.showStatus(e2.toString());;
}
}
}
[戻る]
--applet53 アプレットからから違うHTMLへジャンプ
/* */
import java.awt.*;
import java.awt.event.*;//ActionListener利用
import java.applet.*;
import java.net.*; //URL使用のため
public class applet53 extends Applet implements ActionListener {
Button btn1,btn2; //ボタン
public void init(){//アプレットがロードされた時に呼ばれる。
add(btn1 = new Button("相対パス指定で、javatext.htmlへジャンプ"));
add(btn2 = new Button("http://www001.upp.so-net.ne.jp/yuu/へジャンプ"));
btn1.addActionListener(this);
btn2.addActionListener(this);
}
public void actionPerformed(ActionEvent e){ //ボタン処理
URL url;
try {
Object btn = e.getSource(); //イベント発生オブジェクト取得
if(btn == btn1){
url = new URL(getDocumentBase(), "javatext.html");
} else {
url = new URL(getDocumentBase(), "http://www001.upp.so-net.ne.jp/yuu/");
}
} catch (MalformedURLException exc) {
url = null;
}
getAppletContext().showDocument(url); // urlのページに移動する(ページを開く) !
}
}
[戻る]
--applet54HTMLの情報を取得し、ボタンでそこに記述されるフレームをロードし、実行させる。
//HTMLの情報を取得し、ボタンでそこに記述されるフレームをロードし、実行させる。
/* */
//sun.applet.AppletClassLoader アプリケーションクラスのロードには非公開の AppClassLoader が使われている
import java.awt.*;
import java.awt.event.*;//ActionListener利用
import java.applet.*;
import java.net.*; //URL使用のため
public class applet54 extends Applet implements ActionListener {
Button btn; //ボタン
String parm;
public void init(){//アプレットがロードされた時に呼ばれる。
parm = getParameter("applet54");
add(btn = new Button(parm + "の実行"));
btn.addActionListener(this);
}
public void actionPerformed(ActionEvent e){ //ボタン処理
java.lang.reflect.Method methods[];
java.lang.reflect.Method main_method = null;
java.lang.reflect.Constructor constractors[];
try {
URL urls[] = new URL[1];
URL url = getDocumentBase(); //このAppletの絶対 URL
urls[0] = url;
//以下は試しで、appletでは不可
//URLClassLoader urlLoader = new URLClassLoader(urls);
//Class cls = loader.loadClass("frame54");
Class cls = Class.forName(parm);
constractors = cls.getConstructors();
constractors[0].newInstance(null);//ここで生成
/*
methods = cls.getDeclaredMethods();
for(int i = 0; i < methods.length ; i++){
if(methods[i].getName().equals("main")) {
main_method = methods[i];
}
}
Object args[] = new Object[1];
args[0] = null;
main_method.invoke(null,args); //mian起動
*/
} catch (Exception err) {
showStatus("Error " + err.toString());
}
}
}
[戻る]
---
/* */
import javax.sound.midi.*;
import java.awt.*;
import java.applet.Applet;
import java.awt.event.*;
public class AppletPiano extends Applet implements ActionListener {
String code[] = {"C","C#","D","D#","E","F","F#","G","G#","A","A#","B", "C" };
Button btns[] = new Button[code.length];
int noteNumber = 60;//音階(中央のドの音で0から127)
int velocity = 127;//キーダウン速度は通常
Synthesizer synth;
MidiChannel chan = null;
TextField txtVelocity = new TextField("" + velocity);
public void init() {
setBackground(Color.white);
setLayout(new GridLayout(1,code.length + 1)); // 1行,length列
for(int i = 0; i < code.length; i++){
btns[i] = new Button(code[i]);
add( btns[i] );
btns[i].addActionListener(this);
}
add(txtVelocity);
try {
// シンセサイザーを取得
synth = MidiSystem.getSynthesizer();
// MIDIチャンネルリストを取得
MidiChannel chans[] = synth.getChannels();
// シンセサイザーを開く
synth.open();
chan = chans[4];//ピアノのチャンネル
}
catch (MidiUnavailableException e) {
showStatus(e.toString());
chan = null;
}
}
public void actionPerformed(ActionEvent e){
Button btn = (Button)e.getSource();
velocity = Integer.parseInt( txtVelocity.getText() );
int i = 0;
for(i = 0; i < btns.length; i++){
if(btn == btns[i]) break; //クリックしたボタンを配列から探す。
}
if( i != btns.length){
noteNumber = 60 + i;
}
if (chan != null) {
chan.setMute(false);
chan.noteOff(noteNumber); // 前回鳴らしていた音を消す
chan.noteOn(noteNumber, velocity); // サイズで指定された音を出力
//以上は、appletviewer を使うと鳴るが、html内のアプレットでは音が鳴らなかった。
showStatus("note:" + noteNumber + ", velocity:" + velocity );
} else {
showStatus("MidiChannel null");
}
}
}
[戻る]
---
---