자바로 만들어본 메모장 'ㅅ'..
아직 폰트기능은 안넣었지만
간단한 원도우용 프로그램을
내손으로 만들었다는것에서 대해 의미를 갖는다..
아직 폰트기능은 안넣었지만
간단한 원도우용 프로그램을
내손으로 만들었다는것에서 대해 의미를 갖는다..
more..
package Ex;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.awt.datatransfer.*;
import javax.swing.*;
class MyMenuBar extends MenuBar{
public MyMenuBar(Frame parent){
parent.setMenuBar(this);
}
public void addMenus(String[] menus){
for(int i=0;i<menus.length;i++)
add(new Menu(menus[i]));
}
public void addMenuItems(int menuNumber,String[] items){
for(int i=0;i<items.length;i++){
if(items[i]!=null)
getMenu(menuNumber).add(new MenuItem(items[i]));
else getMenu(menuNumber).addSeparator();
}
}
public void addActionListener(ActionListener al){
for(int i=0;i<getMenuCount();i++)
for(int j=0;j< getMenu(i).getItemCount();j++)
getMenu(i).getItem(j).addActionListener(al);
}
}
class MyFile{
private FileDialog fDlg;
public MyFile(Frame parent){
fDlg=new FileDialog(parent,"",FileDialog.LOAD);
}
private String getPath(){
return fDlg.getDirectory()+"\\"+fDlg.getFile();
}
public String getData() throws IOException{
fDlg.setTitle("열기");
fDlg.setMode(FileDialog.LOAD);
fDlg.setVisible(true);
BufferedReader br=
new BufferedReader(new FileReader(getPath()));
StringBuffer sb=new StringBuffer();
String aline;
while((aline=br.readLine())!=null)
sb.append(aline+'\n');
br.close();
return sb.toString();
}
public void setData(String data) throws IOException{
fDlg.setTitle("저장");
fDlg.setMode(FileDialog.SAVE);
fDlg.setVisible(true);
BufferedWriter bw=
new BufferedWriter(new FileWriter(getPath()));
bw.write(data);
bw.close();
}
}
class MyClipboard{
private Clipboard cb;
public MyClipboard(){
cb=Toolkit.getDefaultToolkit().getSystemClipboard();
}
public void setData(String data){
cb.setContents(new StringSelection(data),null);
}
public String getData(){
Transferable content=cb.getContents(null);
try{
return (String)content.getTransferData(DataFlavor.stringFlavor);
}catch(Exception ue){}
return null;
}
}
class MyFindDialog extends Dialog implements ActionListener{
private Label lFind=new Label("찾을 문자열:");
private Label lReplace=new Label("바꿀 문자열:");
private TextField tFind=new TextField(10);
private TextField tReplace=new TextField(10);
private Button bFind=new Button("찾기");
private Button bReplace=new Button("바꾸기");
private TextArea ta;
public MyFindDialog(Frame owner, TextArea ta){
super(owner,"찾기",false);
this.ta=ta;
setLayout(null);
lFind.setBounds(10,30,80,20); lReplace.setBounds(10,70,80,20);
tFind.setBounds(90,30,90,20); tReplace.setBounds(90,70,90,20);
bFind.setBounds(190,30,80,20); bReplace.setBounds(190,70,80,20);
add(lFind); add(tFind); add(bFind); add(lReplace);
add(tReplace); add(bReplace);
setResizable(false);
bFind.addActionListener(this);
bReplace.addActionListener(this);
addWindowListener( new WindowAdapter(){
public void windowClosing(WindowEvent e){
MyFindDialog.this.dispose();
}
});
}
public void showFind(){
setTitle("찾기"); setSize(280,60); setVisible(true);
}
public void showReplace(){
setTitle("찾아 바꾸기"); setSize(280,110); setVisible(true);
}
private void find(){
String text=ta.getText();
String str=tFind.getText();
int end=text.length();
int len=str.length();
int start=ta.getSelectionEnd();
if(start==end)start=0;
for( ;start<=end-len;start++){
if(text.substring(start,start+len).equals(str)){
ta.setSelectionStart(start);
ta.setSelectionEnd(start+len);
return;
}
}
ta.setSelectionStart(end);
ta.setSelectionEnd(end);
}
private void replace(){
String str=tReplace.getText();
if(ta.getSelectedText().equals(tFind.getText()))
ta.replaceRange(str,ta.getSelectionStart(),ta.getSelectionEnd());
else find();
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==bFind)
find();
else if(e.getSource()==bReplace)
replace();
}
}
public class MeMo extends JFrame implements ActionListener{
private TextArea editor=new TextArea();
private MyFile mf=new MyFile(this);
private MyClipboard cb=new MyClipboard();
private MyFindDialog findDlg=new MyFindDialog(this,editor);
public MeMo(String title){
super(title);
MyMenuBar mb=new MyMenuBar(this);
mb.addMenus(new String[]{"파일","편집","찾기"});
mb.addMenuItems(0, new String[]{"새로만들기","열기","저장",null,"종료"});
mb.addMenuItems(1, new String[]{"잘라내기","복사하기",
"붙여넣기","삭제",null,"전체선택"});
mb.addMenuItems(2, new String[]{"찾기",null,"찾아 바꾸기"});
add(editor);
mb.addActionListener(this);
addWindowListener( new WindowAdapter(){
public void windowClosing(WindowEvent e){
MeMo.this.dispose();
}
});
}
public void actionPerformed(ActionEvent e){
String selected =e.getActionCommand();
if(selected.equals("새로만들기"))
editor.setText("");
else if(selected.equals("열기")){
try{
editor.setText(mf.getData());
}catch(IOException ie){}
}
else if(selected.equals("저장")){
try{
mf.setData(editor.getText());
}catch(IOException ie){}
}
else if(selected.equals("종료")){
dispose();
}
else if(selected.equals("잘라내기") ){
cb.setData(editor.getSelectedText());
editor.replaceRange("",editor.getSelectionStart(),editor.getSelectionEnd());
}
else if(selected.equals("복사하기") ){
cb.setData(editor.getSelectedText());
}
else if(selected.equals("붙여넣기") ){
String str=cb.getData();
editor.replaceRange(str,editor.getSelectionStart(),editor.getSelectionEnd());
}
else if(selected.equals("삭제") ){
editor.replaceRange("",editor.getSelectionStart(),editor.getSelectionEnd());
}
else if(selected.equals("전체선택") ){
editor.setSelectionStart(0);
editor.setSelectionEnd(editor.getText().length());
}
else if(selected.equals("찾기") ){
findDlg.showFind();
}
else if(selected.equals("찾아 바꾸기") ){
findDlg.showReplace();
}
}
public static void main(String[] args){
MeMo memo=new MeMo("My Memo...By DyNast");
memo.setSize(300,300);
memo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
memo.setVisible(true);
}
}
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.awt.datatransfer.*;
import javax.swing.*;
class MyMenuBar extends MenuBar{
public MyMenuBar(Frame parent){
parent.setMenuBar(this);
}
public void addMenus(String[] menus){
for(int i=0;i<menus.length;i++)
add(new Menu(menus[i]));
}
public void addMenuItems(int menuNumber,String[] items){
for(int i=0;i<items.length;i++){
if(items[i]!=null)
getMenu(menuNumber).add(new MenuItem(items[i]));
else getMenu(menuNumber).addSeparator();
}
}
public void addActionListener(ActionListener al){
for(int i=0;i<getMenuCount();i++)
for(int j=0;j< getMenu(i).getItemCount();j++)
getMenu(i).getItem(j).addActionListener(al);
}
}
class MyFile{
private FileDialog fDlg;
public MyFile(Frame parent){
fDlg=new FileDialog(parent,"",FileDialog.LOAD);
}
private String getPath(){
return fDlg.getDirectory()+"\\"+fDlg.getFile();
}
public String getData() throws IOException{
fDlg.setTitle("열기");
fDlg.setMode(FileDialog.LOAD);
fDlg.setVisible(true);
BufferedReader br=
new BufferedReader(new FileReader(getPath()));
StringBuffer sb=new StringBuffer();
String aline;
while((aline=br.readLine())!=null)
sb.append(aline+'\n');
br.close();
return sb.toString();
}
public void setData(String data) throws IOException{
fDlg.setTitle("저장");
fDlg.setMode(FileDialog.SAVE);
fDlg.setVisible(true);
BufferedWriter bw=
new BufferedWriter(new FileWriter(getPath()));
bw.write(data);
bw.close();
}
}
class MyClipboard{
private Clipboard cb;
public MyClipboard(){
cb=Toolkit.getDefaultToolkit().getSystemClipboard();
}
public void setData(String data){
cb.setContents(new StringSelection(data),null);
}
public String getData(){
Transferable content=cb.getContents(null);
try{
return (String)content.getTransferData(DataFlavor.stringFlavor);
}catch(Exception ue){}
return null;
}
}
class MyFindDialog extends Dialog implements ActionListener{
private Label lFind=new Label("찾을 문자열:");
private Label lReplace=new Label("바꿀 문자열:");
private TextField tFind=new TextField(10);
private TextField tReplace=new TextField(10);
private Button bFind=new Button("찾기");
private Button bReplace=new Button("바꾸기");
private TextArea ta;
public MyFindDialog(Frame owner, TextArea ta){
super(owner,"찾기",false);
this.ta=ta;
setLayout(null);
lFind.setBounds(10,30,80,20); lReplace.setBounds(10,70,80,20);
tFind.setBounds(90,30,90,20); tReplace.setBounds(90,70,90,20);
bFind.setBounds(190,30,80,20); bReplace.setBounds(190,70,80,20);
add(lFind); add(tFind); add(bFind); add(lReplace);
add(tReplace); add(bReplace);
setResizable(false);
bFind.addActionListener(this);
bReplace.addActionListener(this);
addWindowListener( new WindowAdapter(){
public void windowClosing(WindowEvent e){
MyFindDialog.this.dispose();
}
});
}
public void showFind(){
setTitle("찾기"); setSize(280,60); setVisible(true);
}
public void showReplace(){
setTitle("찾아 바꾸기"); setSize(280,110); setVisible(true);
}
private void find(){
String text=ta.getText();
String str=tFind.getText();
int end=text.length();
int len=str.length();
int start=ta.getSelectionEnd();
if(start==end)start=0;
for( ;start<=end-len;start++){
if(text.substring(start,start+len).equals(str)){
ta.setSelectionStart(start);
ta.setSelectionEnd(start+len);
return;
}
}
ta.setSelectionStart(end);
ta.setSelectionEnd(end);
}
private void replace(){
String str=tReplace.getText();
if(ta.getSelectedText().equals(tFind.getText()))
ta.replaceRange(str,ta.getSelectionStart(),ta.getSelectionEnd());
else find();
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==bFind)
find();
else if(e.getSource()==bReplace)
replace();
}
}
public class MeMo extends JFrame implements ActionListener{
private TextArea editor=new TextArea();
private MyFile mf=new MyFile(this);
private MyClipboard cb=new MyClipboard();
private MyFindDialog findDlg=new MyFindDialog(this,editor);
public MeMo(String title){
super(title);
MyMenuBar mb=new MyMenuBar(this);
mb.addMenus(new String[]{"파일","편집","찾기"});
mb.addMenuItems(0, new String[]{"새로만들기","열기","저장",null,"종료"});
mb.addMenuItems(1, new String[]{"잘라내기","복사하기",
"붙여넣기","삭제",null,"전체선택"});
mb.addMenuItems(2, new String[]{"찾기",null,"찾아 바꾸기"});
add(editor);
mb.addActionListener(this);
addWindowListener( new WindowAdapter(){
public void windowClosing(WindowEvent e){
MeMo.this.dispose();
}
});
}
public void actionPerformed(ActionEvent e){
String selected =e.getActionCommand();
if(selected.equals("새로만들기"))
editor.setText("");
else if(selected.equals("열기")){
try{
editor.setText(mf.getData());
}catch(IOException ie){}
}
else if(selected.equals("저장")){
try{
mf.setData(editor.getText());
}catch(IOException ie){}
}
else if(selected.equals("종료")){
dispose();
}
else if(selected.equals("잘라내기") ){
cb.setData(editor.getSelectedText());
editor.replaceRange("",editor.getSelectionStart(),editor.getSelectionEnd());
}
else if(selected.equals("복사하기") ){
cb.setData(editor.getSelectedText());
}
else if(selected.equals("붙여넣기") ){
String str=cb.getData();
editor.replaceRange(str,editor.getSelectionStart(),editor.getSelectionEnd());
}
else if(selected.equals("삭제") ){
editor.replaceRange("",editor.getSelectionStart(),editor.getSelectionEnd());
}
else if(selected.equals("전체선택") ){
editor.setSelectionStart(0);
editor.setSelectionEnd(editor.getText().length());
}
else if(selected.equals("찾기") ){
findDlg.showFind();
}
else if(selected.equals("찾아 바꾸기") ){
findDlg.showReplace();
}
}
public static void main(String[] args){
MeMo memo=new MeMo("My Memo...By DyNast");
memo.setSize(300,300);
memo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
memo.setVisible(true);
}
}
http://dynast.tistory.com/trackback/128


MeMo.exe
이올린에 북마크하기
이올린에 추천하기



