//JAVAクラスパッケージをインポート
java.awt.* をインポートします。
インポート java.awt.event.*;
javax.swing.* をインポートします。
java.io.*
クラス
をインポートします。
{
//デフォルトのコンストラクタ
EditFile(){}
//ファイル保存関数
void SaveFile(文字列名,文字列str)
{
試す
{
//ファイル出力オブジェクトを宣言
FileOutputStream fos = 新しい FileOutputStream(名前);
//保存ファイルを出力する
fos.write(str.getBytes());
}
catch (IOException e)
{
//エラーが発生し、エラーメッセージを出力します
System.out.println(e.toString());
}
}
//ファイルを開く関数
String OpenFile(文字列名)
{
// ファイルの内容を保存する文字列 str を定義します
文字列 str=null;
//カウンターを定義
int ch=0;
試す
{
//ファイル入力オブジェクトを宣言する
FileInputStream fis = 新しい FileInputStream(名前);
//入力オブジェクトを走査し、メモリを str に保存します
while ((ch=fis.read())!=-1)
{
str=str+(char)ch;
}
// ファイルオブジェクトを閉じる
fis.close();
}
catch (IOException e)
{
//エラーが発生し、エラーメッセージを出力します
System.out.println(e.toString());
}
// 文字列を返す
文字列を返します。
}
クラス
MyMainFrame は JFrame を拡張し、ActionListener を実装します
{
//ファイル名
文字列ファイル名=null;
//文字列を検索
文字列findtxt=null;
//文字列を置換する
文字列 replacetxt=null;
//開始位置を見つける
int findtxton=-1;
// エンドビットを見つける
int findtxtoff=-1;
//中央のパネル
コンテナ c=getContentPane();
//メニュー
JMenuBar mainMb=new JMenuBar();
//メニューボタン
JMenu fileMenu=new JMenu("ファイル");
JMenu editMenu=new JMenu("編集");
JMenu typeMenu=new JMenu("format");
JMenuItem newItem=new JMenuItem("新規");
JMenuItem openItem=new JMenuItem("open");
JMenuItem saveItem=new JMenuItem("保存");
JMenuItem saveasItem=new JMenuItem("名前を付けて保存");
JMenuItem exitItem=new JMenuItem("終了");
JMenuItem findItem=new JMenuItem("検索");
JMenuItem findnextItem=new JMenuItem("次を検索");
JMenuItemchangeItem=new JMenuItem("replace");
JCheckBoxMenuItemchangelineItem=new JCheckBoxMenuItem("自動行折り返し",false);
//テキストフィールド
JTextArea txt=new JTextArea();
JTextArea txt2=new JTextArea();
//スクロールバー
JScrollPane jsp;
//ファイル操作オブジェクト
EditFile ef=new EditFile();
//コンストラクタ
MyMainFrame()
{
//インターフェースを描画する
c.setLayout(new BorderLayout());
jsp= 新しい JScrollPane(txt);
jsp.sethorizontalScrollBarPolicy(jsp.HORIZONTAL_SCROLLBAR_AS_NEEDED);
c.add(jsp,BorderLayout.CENTER);
mainMb.add(fileMenu);
fileMenu.add(newItem);
fileMenu.add(openItem);
fileMenu.add(saveItem);
fileMenu.add(saveasItem);
fileMenu.addSeparator();
fileMenu.add(exitItem);
mainMb.add(editMenu);
editMenu.add(findItem);
editMenu.add(findnextItem);
editMenu.add(changeItem);
mainMb.add(typeMenu);
typeMenu.add(changelineItem);
setJMenuBar(mainMb);
//メニューをリッスンするイベントを追加
newItem.addActionListener(this);
openItem.addActionListener(this);
saveItem.addActionListener(this);
saveasItem.addActionListener(this);
exitItem.addActionListener(this);
findItem.addActionListener(this);
findnextItem.addActionListener(this);
ChangeItem.addActionListener(this);
ChangelineItem.addActionListener(this);
}
//イベントハンドラ関数
public void actionPerformed(ActionEvent e)
{
//ファイル操作オブジェクトを作成する
EditFile ef=new EditFile();
// ボタンをクリックすると新規になります
if(e.getActionCommand()=="新規")
{
//テキストフィールドを空に設定します
txt.setText(null);
// ファイル名は空です
ファイル名=null;
}
//ボタンをクリックして開いた場合
if(e.getActionCommand()=="open")
{
// ファイル形式を定義する
FileDialog openDialog=new FileDialog(this,"ファイルを開く...",FileDialog.LOAD);
//フォームを表示する
openDialog.show();
//返されたファイルが空でない場合
if(openDialog.getFile()!=null)
{
//ファイル名を取得する
ファイル名=openDialog.getFile();
// ファイルの内容を取得する
txt.setText(ef.OpenFile(openDialog.getFile()));
}
}
//ボタンをクリックして保存した場合
if(e.getActionCommand()=="保存")
{
//ファイル名がない場合
if(ファイル名==null)
{
// ファイル形式を定義する
FileDialog saveDialog=new FileDialog(this,"名前を付けて保存...",FileDialog.SAVE);
//フォームを表示する
saveDialog.show();
//返されたファイルが空でない場合
if(saveDialog.getFile()!=null)
{
//ファイル名を取得する
ファイル名=saveDialog.getFile();
//ファイルを保存
ef.SaveFile(ファイル名,txt.getText());
}
}
それ以外
{
// ファイルを直接保存する
ef.SaveFile(ファイル名,txt.getText());
}
}
//名前を付けて保存ボタンをクリックした場合
if(e.getActionCommand()=="名前を付けて保存")
{
// ファイル形式を定義する
FileDialog saveDialog=new FileDialog(this,"名前を付けて保存...",FileDialog.SAVE);
//フォームを表示する
saveDialog.show();
//返されたファイルが空でない場合
if(saveDialog.getFile()!=null)
{
//ファイル名を取得する
ファイル名=saveDialog.getFile();
//ファイルを保存
ef.SaveFile(ファイル名,txt.getText());
}
}
//ボタンをクリックして終了した場合
if(e.getActionCommand()=="終了")
{
//やめる
System.exit(0);
}
//ボタンをクリックすると検索
if(e.getActionCommand()=="検索")
{
//ダイアログボックスを定義する
JOptionPane inputdia=new JOptionPane();
//検索テキストを取得するダイアログ ボックスを定義します
findtxt=inputdia.showInputDialog("検索したいテキストを入力してください",null);
//実際の座標を定義する
findtxton=-1;
findtxtoff=-1;
//検索関数を呼び出す
探す();
}
// ボタンをクリックすると次のボタンが見つかります
if(e.getActionCommand()=="次を検索")
{
//検索関数を呼び出す
探す();
}
//ボタンがクリックされた場合は置換
if(e.getActionCommand()=="置換")
{
//ダイアログボックスを定義する
JOptionPane inputdia=new JOptionPane();
//検索および置換テキストを取得します
findtxt=inputdia.showInputDialog("置換するテキストを入力してください",null);
replacetxt=inputdia.showInputDialog("置換されたテキストを入力してください",null);
//コンテンツをバックアップする
txt2.setText(replacetxt);
txt2.selectAll();
txt2.copy();
//検索関数を呼び出す
探す();
//見つからない場合
if(findtxton==-1&&findtxtoff==-1)
{
}
//見つかった場合
それ以外
{
//交換する
txt.paste();
}
findtxton=-1;
findtxtoff=-1;
}
//ボタンをクリックすると自動的に折り返されます
if(e.getActionCommand()=="自動行折り返し")
{
//現在の状態を判断する
if(changelineItem.isSelected()==true)
{
//スクロールバーの状態を設定する
jsp.sethorizontalScrollBarPolicy(jsp.HORIZONTAL_SCROLLBAR_NEVER);
//ラップするかどうかを設定する
txt.setLineWrap(true);
}
それ以外
{
jsp.sethorizontalScrollBarPolicy(jsp.HORIZONTAL_SCROLLBAR_AS_NEEDED);
txt.setLineWrap(false);
}
}
}
//関数を検索
パブリック void find()
{
//一時的な文字列を定義する
文字列 tempstr;
// 空でない場合はテキストを検索します
if(findtxt!=null)
{
試す
{
//検索
tempstr=txt.getText(findtxton+1,(txt.getText().length()-findtxton-1));
findtxton=findtxton+1+tempstr.indexOf(findtxt);
}
catch(例外 e)
{
}
// スタートビットが変化した場合、それが検出されます
if(findtxton!=-1)
{
//エンドビットを設定する
findtxtoff=findtxton+findtxt.length();
}
それ以外
{
//それ以外の場合は「見つかりません」と表示されます
findtxtoff=-1;
JOptionPane.showMessageDialog(null,"見つかりません");
}
//見つかった部分を選択
txt.select(findtxton,findtxtoff);
}
}
パブリック クラス
TextEdit
{
//メイン関数
public static void main(String args[])
{
//メインフォームを設定する宣言
MyMainFrame f=new MyMainFrame();
f.setSize(640,480);
f.setTitle("テキストエディタ");
//メインフォームを表示する
f.setVisible(true)
;
}
/*
JTextArea の自動行折り返しに関する問題
-------------------------------------------------- ----------------------------------
水平スクロールバーが JSctollpane に設定されている場合。
, そうすると、このJSctollpaneオブジェクトが追加されたJTextAreaには行折り返し機能が付きますよね?
-------------------------------------------------- ------------------------
JTextArea.setLineWrap(ブール値ラップ)
------------- ---- ------------------------------------------------ ---- --------------
JTextArea.setLineWrap(boolean Wrap)//一般的な行の折り返し。
JTextArea.setWrapStyleWorld(boolean world)//単語の端を境界として使用して改行します
*/