テキストエディタ


[挿入]ボタン・・・挿入文字列Boxに入力した文字列を,カーソル位置に挿入します。
[検索]ボタン・・・検索文字列Boxに入力した文字列を探し,反転選択します。
[置換]ボタン・・・検索などで選択された文字列を,挿入文字列Boxに入力した文字列に置換する。(検索,置換を繰り返すと複数の検索,置換が実行できる)
[文字数カウント]ボタン・・・総文字数を末尾に表示します。
その他のボタンは,標準の操作と同じです。
Java Appletです

ソースコード

import java.applet.*;
import java.awt.*;

public class ja53 extends Applet
{
  Label LA1 = new Label("挿入文字列"); //ラベルの作成
  Label LA2 = new Label("検索文字列");
  TextField TF1 = new TextField(25);	//1行25ドットのTextFieldを作成
  TextField TF2 = new TextField(25);
  TextArea TA = new TextArea("テキスト編集エリア",10,40);	//10行40ドット(列)のTextAreaを作成
  Button CUT,COPY,PASTE,INSERT,FIND,TIKAN,REPLACE,ALL,countTA;	//ボタン
  Panel PA1 = new Panel();			//パネルの作成
  Panel PA2 = new Panel();
  String tf1s,tf2s,tas,st;	//編集用の文字列を格納

  public void init()
  {
    	setLayout(new BorderLayout(10,10));	//AppletのレイアウトをBorderLayoutに設定

	PA1.add(LA1);		//パネル1にラベル2個と,TextField2個を配置
	PA1.add(TF1);
	PA1.add(LA2);
	PA1.add(TF2);

	add("North",PA1);		//パネル1をBorderLayoutの"North"(上部)に配置

	add("Center",TA);		//TextAreaをBorderLayoutの"Center"(中央)に配置

	CUT = new Button("切取り");	//以下,各ボタンを作成
	COPY = new Button("コピー");
	PASTE = new Button("貼り付け");
	INSERT = new Button("挿入");
	FIND = new Button("検索");
	TIKAN = new Button("置換");
	REPLACE = new Button("大文字に変換");
	ALL = new Button("全て選択");
	countTA = new Button("文字数カウント");
	PA2.add(CUT);			//各ボタンをパネル2に配置
	PA2.add(COPY);
	PA2.add(PASTE);
	PA2.add(INSERT);
	PA2.add(FIND);
	PA2.add(TIKAN);
	PA2.add(REPLACE);
	PA2.add(ALL);
	PA2.add(countTA);

	add("South",PA2);		//パネル2をBorderLayoutの"South"(下部)に配置

	st = "";
  }

  public boolean action(Event e,Object o){
	int startst = TA.getSelectionStart();	//選択範囲の先頭,又はカーソル位置
	int endst = TA.getSelectionEnd();	//選択範囲の末尾

	if(e.target == CUT){			//[切取り]ボタンの場合
	  st = TA.getSelectedText();		//選択範囲の文字列を取得
	  TA.replaceText("",startst,endst);	//選択範囲の文字列を””にする(削除する)
	}
	if(e.target == COPY)st = TA.getSelectedText();	//[コピー]ボタンの場合
	if(e.target == PASTE)TA.replaceText(st,startst,endst);//[貼り付け]ボタンの場合
	if(e.target == INSERT){			//[挿入]ボタンの場合
	  tf1s = TF1.getText();
   	  TA.insertText(tf1s,startst);  //TextFieldの文字列を,TextAreaのカーソル位置に挿入する
	}
	if(e.target == FIND){			//[検索]ボタンの場合
	  tf2s = TF2.getText();
 	  int n = TA.getText().indexOf(tf2s);
		//indexOf()は,TA.getText()の中で文字列tf2sが最初に出現する位置を返す
		//出現しない場合,-1を返す
	  if(n >= 0){
		TA.select(n,n + tf2s.length());	//結局,文字列tf2sが選択される
		TA.requestFocus();		//TextAreaにフォーカスを移す(java.awt.Componentクラスのメソッド)
	  }
	}
	if(e.target == TIKAN){			//[置換]ボタンの場合
	  tf1s = TF1.getText();
	  TA.replaceText(tf1s,startst,endst);	//現在選択されている文字列をTextField1の文字列で置換
	}
	if(e.target == REPLACE){		//[大文字に変換]ボタンの場合
	  tas = TA.getText();
	  for(int i = 0;i < tas.length();i++){
	    if(Character.isLowerCase(tas.charAt(i))){	
			//TextAreaの文字列で,i番目の文字が小文字ならtrueを返す
		TA.replaceText(String.valueOf(tas.charAt(i)).toUpperCase(),i,i+1);
		  //i番目の文字を大文字に変換し,さらにString型に変換し,i番目の文字と置き換える
	    }
	  }
	  return true;
	}
	if(e.target == ALL)TA.selectAll();	//[全て選択]ボタンで,TextAreaの全文字列を選択
	if(e.target == countTA){		//[文字数カウント]ボタンの場合
	  tas = TA.getText();
	  int count = tas.length();		//TextArea内の文字数を取得
	  TA.appendText("\n現在の文字数は= " + count);
			//TextAreaの末尾に文字列を追加。\n は,この位置で改行する
	}
	return true;
  }
}

末尾