import java.io.*;
import java.beans.*;
import java.awt.*;
import java.awt.datatransfer.*;
import java.awt.print.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;
import javax.swing.event.*;
import javax.swing.undo.*;
import javax.swing.border.*;
public class Jmemo extends JFrame implements ClipboardOwner,ActionListener,Printable,UndoableEditListener
{
Container contentPane;
private JTextArea ta = new JTextArea(); //글을쓸 텍스트에어리어
private JMenuBar mb = new JMenuBar();//메뉴바
private JMenu m1,m2,m3,m4;//메뉴
private JMenuItem mi11,mi12,mi13,mi14,mi15,mi16,mi17
,mi21,mi22,mi23,mi24,mi25,mi26,mi27,mi28,mi29,mi2a,mi2b
,mi32
,mi41,mi42 ;//메뉴 아이템
private JCheckBoxMenuItem mi31;
String st="";
File file;
private JOptionPane jOptionPane;
Object options[]={"예","아니오","취소"};
int cnt;
JViewport viewPort;
JScrollPane scrollPane;
UndoManager undoManager=new UndoManager();
public Jmemo(String title)
{
super(title);
/*
try
{//룩앤필 설정 : 윈도우(윈도우에서만 가능)
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
}
catch(Exception e)
{
System.err.println("자바 룩앤필 에러 :"+e.getMessage());
JOptionPane.showMessageDialog(this,"Windows환경에서만 가능합니다."
,"자바 룩앤필 에러",JOptionPane.ERROR_MESSAGE);
}
*/
try
{//룩앤필 설정 : 크로스
UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
}
catch(Exception e)
{
System.err.println("자바 룩앤필 에러 :"+e.getMessage());
JOptionPane.showMessageDialog(this,"설정하신 룩앤필이 존재하지 않습니다.","자바 룩앤필 에러",JOptionPane.ERROR_MESSAGE);
}
Image img=getToolkit().getImage("img/memo.gif");
setIconImage(img);//윈도우 아이콘 변경
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent we){
System.exit(0);}});//윈도우 종료시 프로그램 종료
ta.getDocument().addUndoableEditListener(this);
contentPane = getContentPane();
scrollPane =new JScrollPane(ta);
//scrollPane.add(ta);
viewPort=scrollPane.getViewport();
viewPort.add(ta);
contentPane.add(scrollPane);//TextArea
this.setJMenuBar(mb);//메뉴바
///////////////////////////////메뉴 구성//////////////////////////////////////////////
m1 = new JMenu("파일");
mi11 = new JMenuItem("새로만들기");
mi12 = new JMenuItem("열기");
mi13 = new JMenuItem("저장");
mi14 = new JMenuItem("다른이름으로저장");
mi15 = new JMenuItem("페이지설정");
mi16 = new JMenuItem("인쇄");
mi17 = new JMenuItem("끝내기");
mi11.addActionListener(this);//액션리스너 등록
mi12.addActionListener(this);
mi13.addActionListener(this);
mi14.addActionListener(this);
mi15.addActionListener(this);
mi16.addActionListener(this);
mi17.addActionListener(this);
mi11.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, ActionEvent.CTRL_MASK));
mi12.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, ActionEvent.CTRL_MASK));
mi13.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.CTRL_MASK));
mi14.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, ActionEvent.ALT_MASK));
mi15.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_U, ActionEvent.ALT_MASK));
mi16.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P, ActionEvent.CTRL_MASK));
mi17.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, ActionEvent.ALT_MASK));
mb.add(m1);
m1.add(mi11);
m1.add(mi12);
m1.add(mi13);
m1.add(mi14);
m1.addSeparator();
m1.add(mi15);
m1.add(mi16);
m1.addSeparator();
m1.add(mi17);
m2 = new JMenu("편집");
mi21 = new JMenuItem("실행취소");
mi22 = new JMenuItem(new DefaultEditorKit.CutAction());
mi22.setText("잘라내기");
mi23 = new JMenuItem(new DefaultEditorKit.CopyAction());
mi23.setText("복사");
mi24 = new JMenuItem(new DefaultEditorKit.PasteAction());
mi24.setText("붙여넣기");
mi25 = new JMenuItem("삭제");
mi26 = new JMenuItem("찾기");
mi27 = new JMenuItem("다음찾기");
mi28 = new JMenuItem("바꾸기");
mi29 = new JMenuItem("이동");
mi2a = new JMenuItem("모두선택");
mi2b = new JMenuItem("시간날짜");
mi21.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z, ActionEvent.CTRL_MASK));
mi22.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, ActionEvent.CTRL_MASK));
mi23.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, ActionEvent.CTRL_MASK));
mi24.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, ActionEvent.CTRL_MASK));
//mi25.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE));
mi26.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F, ActionEvent.CTRL_MASK));
//mi27.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F3,ActionEvent.META_MASK));
mi28.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H, ActionEvent.CTRL_MASK));
mi29.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_G, ActionEvent.CTRL_MASK));
mi2a.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, ActionEvent.CTRL_MASK));
//mi2b.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F5,ActionEvent.META_MASK));
mi21.addActionListener(this);
mi22.addActionListener(this);
mi23.addActionListener(this);
mi24.addActionListener(this);
mi25.addActionListener(this);
mi26.addActionListener(this);
mi27.addActionListener(this);
mi28.addActionListener(this);
mi29.addActionListener(this);
mi2a.addActionListener(this);
mi2b.addActionListener(this);
mb.add(m2);
m2.add(mi21);
m2.addSeparator();
m2.add(mi22);
m2.add(mi23);
m2.add(mi24);
m2.add(mi25);
m2.addSeparator();
m2.add(mi26);
m2.add(mi27);
m2.add(mi28);
m2.add(mi29);
m2.addSeparator();
m2.add(mi2a);
m2.add(mi2b);
m3 = new JMenu("서식");
mi31 = new JCheckBoxMenuItem("자동줄바꿈");
mi32 = new JMenuItem("글꼴");
mi31.addActionListener(this);
mi32.addActionListener(this);
mb.add(m3);
m3.add(mi31);
m3.add(mi32);
m4 = new JMenu("도움말");
mi41 = new JMenuItem("도움말항목");
mi42 = new JMenuItem("메모장정보");
mi41.addActionListener(this);
mi42.addActionListener(this);
mb.add(m4);
m4.add(mi41);
m4.addSeparator();
m4.add(mi42);
}
public boolean keyDown(Event e,int key)
{
cnt++;
System.out.println("SD");
return false;
}
public void actionPerformed(ActionEvent ae)//메뉴 액션 처리
{
try{
String gac=ae.getActionCommand();
if(gac.equals("새로만들기"))
{
File f=getFile();
if(!("".equals(ta.getText()))&&f==null)
{
jOptionPane = new JOptionPane();
jOptionPane.showOptionDialog(this,getTitle().replaceAll("- 메모장","")+
" 파일의 내용이 변경되 었습니다.\n 변경된 내용을 저장 하시겠습니까?",
"메모장",JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.WARNING_MESSAGE,
null, options,options[0]);
if(jOptionPane.getValue().equals(options[0]))
saveDocument(true);
else
ta.setText("");
/*
JOptionPane.showOptionDialog(this,getTitle().replaceAll("- 메모장","")+
" 파일의 내용이 변경되 었습니다.\n 변경된 내용을 저장 하시겠습니까?",
"메모장",JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.WARNING_MESSAGE,null, options,options[0]);
*/
}
else if(cnt>0)
{
JOptionPane.showOptionDialog(this,getTitle().replaceAll("- 메모장","")+
" 파일의 내용이 변경되 었습니다.\n 변경된 내용을 저장 하시겠습니까?",
"메모장",JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.WARNING_MESSAGE,null, options,options[0]);
}
}
else if(gac.equals("열기"))
{
cnt=0;
ta.setText("");
openDocument();
}
else if(gac.equals("저장"))
{
saveDocument(false);
}
else if(gac.equals("다른이름으로저장"))
{
saveDocument(true);
}
else if(gac.equals("페이지설정"))
{
printPage();
}
else if(gac.equals("인쇄"))
{
printDocument();
}
else if(gac.equals("끝내기"))
{
System.exit(0);
}
else if(gac.equals("실행취소"))
{
undoManager.undo();
}
else if(gac.equals("삭제"))
{
ta.replaceRange("",ta.getSelectionStart(), ta.getSelectionEnd());
}
else if(gac.equals("찾기"))
{
FindDialog fd=new FindDialog(this);
fd.setBounds(getX()+40,getY()+70,450,150);
fd.show();
}
else if(gac.equals("바꾸기"))
{
ChangeDialog cd=new ChangeDialog(this);
cd.setBounds(getX()+40,getY()+70,450,200);
cd.show();
}
else if(gac.equals("이동"))
{
MoveDialog md=new MoveDialog(this);
md.setBounds(getX()+40,getY()+70,250,130);
md.show();
int line= md.lineNumber();
//viewPort.setViewPosition(new Point(0,line));
ta.setCaretPosition(line);
//System.out.print(line);
}
else if(gac.equals("자동줄바꿈"))
{
if(mi31.getState())
ta.setLineWrap(true);
else
ta.setLineWrap(false);
}
else if(gac.equals("글꼴"))
{
FontDialog ftd=new FontDialog(this);
ftd.setBounds(getX()+40,getY()+70,530,320);
ftd.show();
Font ft= ftd.fontSet();
ta.setFont(ft);
}
else if(gac.equals("모두선택"))
{
ta.selectAll ();
ta.requestFocus();
}
else if(gac.equals("메모장정보"))
{
HelpDialog hd=new HelpDialog(this);
hd.setBounds(getX()+40,getY()+70,411,313);
hd.show();
}
else if(gac.equals("도움말항목"))
{
//String [] cmdar={"/img/hh.exe","/img/notepad.chm","/img/hh.exe"};
//Process p = Runtime.getRuntime().exec("/img/hh.exe notepad.chm");
//Process p = Runtime.getRuntime().exec(cmdar);
//Process p = Runtime.getRuntime().exec("C:/WINNT/help/hh.exe notepad.chm");
Process p = Runtime.getRuntime().exec("C:/WINNT/notepad.exe");
}
}catch(Exception e){}
}
public void openDocument()
{
JFileChooser chooser=new JFileChooser();
System.out.println(chooser.getFileFilter() );
chooser.setDialogTitle("파일 열기");
int returnVal=chooser.showOpenDialog(this);
if(returnVal !=JFileChooser.APPROVE_OPTION)//cancel 버튼이 눌려지면 취소
return;
File f=chooser.getSelectedFile();//대화상자에서 선택된 파일객체 인스턴스를 구한다
if(!f.exists())
{//파일이 존재하지 않으면 에러 메세지를 띄운후 취소
JOptionPane.showMessageDialog(this,file.getName()+" 파일을 찾을 수 없습니다.",
"파일 열기 에러",JOptionPane.ERROR_MESSAGE);
return;
}
openFile(f);
}///////////////////////openDocument() ////////////////////
public void openFile(File file)
{///파일을 읽어들여 jta에 표시
BufferedReader in=null;//버퍼 문자 입력 스트림
//ta.setText("");//텍스트에리어 내용 초기화
setTitle(file.getName());//윈도우 제목을 파일 이름으로
try
{
in=new BufferedReader(new FileReader(file));
}
catch(FileNotFoundException fnfe)
{//에러 메세지
System.err.println("파일 열기 에러 :"+file.getName()+"파일을 찾을 수 없습니다.");
JOptionPane.showMessageDialog(this,file.getName()+"파일을 찾을 수 없습니다.","파일 열기에러",JOptionPane.ERROR_MESSAGE);
return;
}
catch(Exception e)
{
System.err.println("파일 열기 에러 :"+file.getName()+"파일을 찾을 수 없습니다.");
JOptionPane.showMessageDialog(this,e.getMessage(),"파일 열기에러",JOptionPane.ERROR_MESSAGE);
return;
}
try
{////한 줄씩 읽어서 string형에 저장한후 ta에 보낸다
String string="";
while((string=in.readLine())!=null)
{
st=st+(string+'\n');
}
ta.setText("");
ta.setText(st);
}
catch(IOException ie)
{
System.err.println("파일 읽기 에러 :"+ie.getMessage());
}
try
{
in.close();//입력 스트림 닫는다.
}catch(IOException ie){}
ta.setCaretPosition(0);//커서를 처음으로 위치
viewPort.setViewPosition(new Point(0,0));//위쪽을 보여줌
System.out.print(file.getName());
this.file=file;//읽어들인 파일을 file멤버 필드로 설정
}//////////////////////////////////////openFile(File file) end/////////////////
public File getFile()
{///문서 윈도우의 내용을 파일로 알림
return file;
}
public void saveDocument(boolean isSaveAs)
{//true면 새이름으로 false면 저장
if(isSaveAs==true)
{//새이름으로 저장할 경우 파일 대화상자 표시
JFileChooser chooser=new JFileChooser();
chooser.setDialogTitle("새 이름으로 저장");
int returnVal=chooser.showSaveDialog(this);
if(returnVal !=JFileChooser.APPROVE_OPTION)
return;
File f=chooser.getSelectedFile();
if(f.exists())
{//파일 이름이 이미 존재하면 덮어쓸 것인지 물어본다
Object options[]={"예","아니오"};
if(JOptionPane.showOptionDialog(this,"파일이 이미 존재 합니다.덮어쓸까요?","경고",
JOptionPane.DEFAULT_OPTION,JOptionPane.WARNING_MESSAGE,null,options,options[0]) !=0)
return;//아니오를 선택하면 저장취소
}
saveFile(f);
}
else if(isSaveAs==false)
{//현재 문서 윈도우에 지정된 파일 인스턴스를 가져온다.
File f=getFile();
if(f==null)
{
saveDocument(true);
}
if(!f.exists())
{//파일이 이미 존재하지 않으면 저장을 계속할 것인지 한번더 확인 한다.
Object options[]={"예","아니오"};
if(JOptionPane.showOptionDialog(this,"파일이 존재하지 않습니다.그래도 저장 할까요?","경고",
JOptionPane.DEFAULT_OPTION,JOptionPane.WARNING_MESSAGE,null,options,options[0]) !=0)
return;
}
}
}/////////saveDocument(boolean isSaveAs) end//////////////
public void saveFile(File file)
{///////////file 인자로 지정된 파일로 현재 내용 저장
PrintWriter out=null;//문자 출력 스트림
try
{
out=new PrintWriter(new BufferedWriter(new FileWriter(file)));
}
catch(IOException ie)
{
System.err.println("파일 저장 에러 :"+file.getName()+"파일을 생성 할 수 없습니다.");
JOptionPane.showMessageDialog(this,file.getName()+"파일을 생성 할 수 없습니다.",
"파일 저장 에러",JOptionPane.ERROR_MESSAGE);
}
String string=ta.getText();
out.print(string);//실제 파일에 쓴다
if(out.checkError())
{//print() 메서드는 IOException을 던지지 않으므로 직접 검사를 해보아야 한다.
System.err.println("파일 쓰기 에러");
}
else
{
JOptionPane.showMessageDialog(this,file.getName()+" 파일을 저장 하였습니다.","안내 메세지",JOptionPane.INFORMATION_MESSAGE);
}
out.close();//출력 스트림을 닫는다.
setTitle(file.getName());//현재 파일 이름으로 윈도우 제목 설정
this.file=file;//현재 저장된 파일 객체 인스턴스를 멤버 필드값으로 저장
}////////////////////////////////////////saveFile(File file) end//////////////////
public void printPage()
{/////쪽 설정////
PrinterJob pj=PrinterJob.getPrinterJob();
pj.setPrintable(this);
pj.pageDialog(pj.defaultPage());
}///쪽설정 끝////
public void printDocument()
{////프린트//////
try{
PrinterJob pj=PrinterJob.getPrinterJob();
pj.setPrintable(this);
pj.printDialog();
pj.print();
}catch(Exception e){}
}////프린트 끝////
public int print(Graphics g, PageFormat pf, int pi)throws PrinterException
{////////Printable 구현/////////
if (pi >= 1)
{
return Printable.NO_SUCH_PAGE;
}
Graphics g2=(Graphics2D)g;
g2.translate((int)pf.getImageableX(),(int)pf.getImageableY());
this.paint(g2);
return Printable.PAGE_EXISTS;
}////////Printable 구현 끝/////////
public void lostOwnership(Clipboard cb, Transferable contents){}//ClipboardOwner 구현
public void undoableEditHappened(UndoableEditEvent undoe)
{//UndoableEditListener 구현
if(undoManager !=null)
undoManager.addEdit(undoe.getEdit());
}//UndoableEditListener 구현 끝
public static void main(String args[])
{
Jmemo jm=new Jmemo("제목 없음 - 메모장");
jm.setBounds(300,200,600,400);
jm.setVisible(true) ;
}
}
class FindDialog extends JDialog implements ActionListener
{
private JLabel fjdl = new JLabel();
private JTextField jfdt = new JTextField();
private JButton jdsbn = new JButton();
private JButton jfdc = new JButton();
private JPanel jfdp = new JPanel();
private TitledBorder titledBorder1;
private JRadioButton jfdup = new JRadioButton();
private JRadioButton jfddown = new JRadioButton();
private JCheckBox jfdul = new JCheckBox();
public FindDialog(Frame parent)
{
super(parent,"찾기",false);
setResizable(false);
titledBorder1 = new TitledBorder(new EtchedBorder(EtchedBorder.RAISED,Color.gray,Color.white),"방향");
jfdc.setBounds(342, 63, 98, 26);
jfdc.setText("취소");
jfdc.addActionListener(this);
jdsbn.setBounds(342, 28, 98, 26);
jdsbn.setText("다음 찾기");
jdsbn.addActionListener(this);
jdsbn.setEnabled(false);//첫 프로그램 실행시 선택 되지 않게 설정
fjdl.setText("찾을 내용:");
fjdl.setBounds(17, 29, 58, 24);
this.getContentPane().setLayout(null);
jfdt.setBounds(94, 29, 235, 21);
jfdp.setBorder(titledBorder1);
jfdp.setBounds(128, 59, 200, 45);
jfdp.setLayout(null);
jfdup.setText("위쪽");
jfdup.setBounds(18, 20, 62, 14);
jfddown.setText("아래쪽");
jfddown.setBounds(108, 20, 62, 14);
jfdul.setText("대/소문자 구분");
jfdul.setBounds(20, 75, 101, 26);
this.getContentPane().add(fjdl, null);
this.getContentPane().add(jfdt, null);
this.getContentPane().add(jdsbn, null);
this.getContentPane().add(jfdc, null);
this.getContentPane().add(jfdp, null);
jfdp.add(jfdup, null);
jfdp.add(jfddown, null);
this.getContentPane().add(jfdul, null);
//jfdt.requestFocus();
jfdt.setCaretPosition(0);
}
public void actionPerformed(ActionEvent ae)
{
try{
String gac=ae.getActionCommand();
if(gac.equals("취소"))
{
dispose();
}
else if(gac.equals("다음 찾기"))
{
}
}catch(Exception e){}
}
}
class ChangeDialog extends JDialog implements ActionListener
{
private JLabel jcdl1 = new JLabel();
private JLabel jcdl2 = new JLabel();
private JTextField jcdtf1 = new JTextField();
private JTextField jcdtf2 = new JTextField();
private JButton jcdb1 = new JButton();
private JButton jcdb2 = new JButton();
private JButton jcdb3 = new JButton();
private JButton jcdb4 = new JButton();
private JCheckBox jcdcb = new JCheckBox();
public ChangeDialog(Frame parent)
{
super(parent,"바꾸기",false);
setResizable(false);
jcdcb.setText("대/소문자 구분");
jcdcb.setBounds(24, 125, 178, 24);
jcdb4.setBounds(318, 135, 106, 28);
jcdb4.setText("취소");
jcdb3.setBounds(318, 102, 106, 28);
jcdb3.setText("모두 바꾸기");
jcdb2.setBounds(318, 68, 106, 28);
jcdb2.setText("바꾸기");
jcdb1.setBounds(318, 35, 106, 28);
jcdb1.setText("다음 찾기");
jcdtf2.setBounds(100, 75, 197, 22);
jcdtf1.setBounds(100, 39, 197, 22);
jcdl2.setText("바꿀 내용: ");
jcdl2.setBounds(20, 59, 79, 28);
jcdl1.setText("찾을 내용: ");
jcdl1.setBounds(20, 29, 79, 28);
this.getContentPane().setLayout(null);
this.getContentPane().add(jcdtf2, null);
this.getContentPane().add(jcdl1, null);
this.getContentPane().add(jcdl2, null);
this.getContentPane().add(jcdtf1, null);
this.getContentPane().add(jcdb1, null);
this.getContentPane().add(jcdb2, null);
this.getContentPane().add(jcdb3, null);
this.getContentPane().add(jcdb4, null);
this.getContentPane().add(jcdcb, null);
}
public void actionPerformed(ActionEvent ae)
{
dispose();
}
}
class MoveDialog extends JDialog implements ActionListener
{
private JTextField jmdt = new JTextField();
private JButton jmdb1 = new JButton();
private JButton jmdb2 = new JButton();
String getline = new String();
public MoveDialog(Frame parent)
{
super(parent,"이동",true);
jmdt.setBounds(14, 21, 115, 26);
this.getContentPane().setLayout(null);
jmdb1.setBounds(143, 16, 87, 29);
jmdb1.setText("확인");
jmdb1.addActionListener(this);
jmdb2.setBounds(144, 60, 87, 29);
jmdb2.setText("취소");
jmdb2.addActionListener(this);
this.getContentPane().add(jmdb1, null);
this.getContentPane().add(jmdb2, null);
this.getContentPane().add(jmdt, null);
}
public int lineNumber()
{
return Integer.parseInt(getline);
}
public void actionPerformed(ActionEvent ae)
{
try{
String gac=ae.getActionCommand();
if(gac.equals("확인"))
{
getline=jmdt.getText();
dispose();
}
else if(gac.equals("취소"))
{
dispose();
}
}catch(Exception e){}
}
}
class FontDialog extends Dialog implements ActionListener
{
private Label jfdl1 = new Label();
private Label jfdl2 = new Label();
private Label jfdl3 = new Label();
private Label jfdl4 = new Label();
private Label jfdl5 = new Label();
private Label jfdl6 = new Label();
private TextField jfdtf1 = new TextField();
private TextField jfdtf2 = new TextField();
private TextField jfdtf3 = new TextField();
private List jfdls1 = new List();
private List jfdls2 = new List();
private List jfdls3 = new List();
private Choice jfdcb = new Choice();
private Button jfdb1 = new Button();
private Button jfdb2 = new Button();
private TextField jfdtf4 = new TextField();
Graphics g;
Font f;
String fontname="SansSerif";
int fontstyle=Font.PLAIN;
int size=8;
String [] allFonts=GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
private String [] allSizes = {"8","9","10","11","12","14","16","18","20","22","24","26","28","36","48","72"};
private String [] allStyle ={"보통","기울임꼴","굵게","굵은 기울임꼴"};
FontDialog(Frame parent)
{
super(parent,"글꼴",true);
setResizable(false);
addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent we){dispose();}});
setLayout(null);
for(int i=0;i<allFonts.length;i++)
{
jfdls1.add(allFonts[i]);
}
for(int i=0;i<16;i++)
{
jfdls3.add(allSizes[i]);
}
for(int i=0;i<4;i++)
{
jfdls2.add(allStyle[i]);
}
jfdl1.setText("글꼴");
jfdl1.setBounds(10, 24, 98, 26);
jfdl2.setText("글꼴 스타일");
jfdl2.setBounds(198, 26, 98, 26);
jfdl3.setText("크기");
jfdl3.setBounds(340, 24, 98, 26);
jfdl4.setText("보기");
jfdl4.setBounds(266,157,49,25);
jfdl5.setText("스크립트");
jfdl5.setBounds(266, 236, 98, 25);
jfdtf1.setBounds(10, 49, 181, 24);
jfdtf2.setBounds(201, 49, 129, 24);
jfdtf3.setBounds(340, 49, 91, 24);
jfdls1.setBounds(10, 77, 181, 79);
jfdls1.addActionListener(this);
jfdls2.setBounds(201, 77, 129, 79);
jfdls2.addActionListener(this);
jfdls3.setBounds(340, 77, 91, 79);
jfdls3.addActionListener(this);
jfdcb.setBounds(258, 263, 180, 22);
jfdb1.setBounds(436, 51, 82, 28);
jfdb1.setLabel("확인");
jfdb1.addActionListener(this);
jfdb2.setBounds(436, 85, 82, 28);
jfdb2.setLabel("취소");
jfdb2.addActionListener(this);
add(jfdcb);
add(jfdl4);
add(jfdl5);
add(jfdl1);
add(jfdtf1);
add(jfdls1);
add(jfdb1);
add(jfdb2);
add(jfdls3);
add(jfdl3);
add(jfdtf3);
add(jfdls2);
add(jfdtf2);
add(jfdl2);
jfdl6.setBounds(212, 190,220,40);
jfdl6.setText("가나다AaBbYyZz");
add(jfdl6);
}
public void paint(Graphics g)
{
g.setColor(Color.lightGray);
g.draw3DRect (202, 182, 232, 50,false);
g.setColor(Color.black);
}
public Font fontSet()
{
jfdls1.getSelectedItem();
fontname=jfdls1.getSelectedItem();
if(jfdls2.getSelectedItem().equals("보통"))
fontstyle=Font.PLAIN;
if(jfdls2.getSelectedItem().equals("기울임꼴"))
fontstyle=Font.ITALIC;
if(jfdls2.getSelectedItem().equals("굵게"))
fontstyle=Font.BOLD;
if(jfdls2.getSelectedItem().equals("굵은 기울임꼴"))
fontstyle=Font.ITALIC+Font.BOLD;
jfdtf3.setText(jfdls3.getSelectedItem());
size=Integer.parseInt(jfdls3.getSelectedItem());
return f=new Font(fontname,fontstyle,size);
}
public void actionPerformed(ActionEvent ae)
{
if((ae.getSource()).equals(jfdls1))
{
jfdtf1.setText(jfdls1.getSelectedItem());
fontname=jfdls1.getSelectedItem();
f=new Font(fontname,fontstyle,size);
jfdl6.setFont(f);
}
else if((ae.getSource()).equals(jfdls2))
{
jfdtf2.setText(jfdls2.getSelectedItem());
if(jfdls2.getSelectedItem().equals("보통"))
fontstyle=Font.PLAIN;
if(jfdls2.getSelectedItem().equals("기울임꼴"))
fontstyle=Font.ITALIC;
if(jfdls2.getSelectedItem().equals("굵게"))
fontstyle=Font.BOLD;
if(jfdls2.getSelectedItem().equals("굵은 기울임꼴"))
fontstyle=Font.ITALIC+Font.BOLD;
f=new Font(fontname,fontstyle,size);
jfdl6.setFont(f);
}
else if((ae.getSource()).equals(jfdls3))
{
jfdtf3.setText(jfdls3.getSelectedItem());
size=Integer.parseInt(jfdls3.getSelectedItem());
f=new Font(fontname,fontstyle,size);
jfdl6.setFont(f);
}
else if((ae.getSource()).equals(jfdb1))
{
dispose();
}
else if((ae.getSource()).equals(jfdb2))
{
dispose();
}
}
}
class HelpDialog extends Dialog implements ActionListener
{//도움말 새창
Button ok;//누르면 창이 닫히는 버튼
Image img=getToolkit().getImage("img/memo.gif");
Image mh=getToolkit().getImage("img/mh.gif");
Image minfo=getToolkit().getImage("img/minfo.gif");
Font f=new Font("굴림",Font.PLAIN,12);
HelpDialog(Frame parent)
{
super(parent,"메모장 정보",true);
setResizable(false);
setLayout(null);
ok=new Button("확 인");
ok.addActionListener(this);
ok.setBounds(290,280,90,25);
add(ok);
addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent we){dispose();}});
}
public void paint(Graphics g)
{
Insets insets=getInsets();
g.setFont(f);
g.drawImage(minfo,insets.left,insets.top,410,77,this);
g.drawImage(mh,15,105,32,30,this);
g.drawString("Wicrosoft (R) 메모장",66,120);
g.drawString("버전 1.0 (빌드 2195: Service Pack 3)",66,137);
g.drawString("Copyright (C) 1981-1999 Wicrosoft Corp.",66,153);
g.drawString("이 제품은 다음 사용자에게 사용이 허가되었습니다.",66,200);
g.drawString("jdk 깔린 컴텨",66,216);
g.setColor(Color.lightGray);
g.draw3DRect (66,248,334,1,false);
g.setColor(Color.black);
String p= Runtime.getRuntime().totalMemory()/1024+"";
g.drawString("Virtual Machine에서 사용할 수 있는 실제 메모리: "+p ,66,265);
}
public void actionPerformed(ActionEvent ae)
{
dispose();
}
}
첨부 파일 - 이미지+ 도움말... ( 경로 /img )
[출처] Swing을 이용한 윈도우 메모장 만들기|작성자 태쥐
'자바 > 추천소스모음' 카테고리의 다른 글
안드로이드 조그버튼(휠) 예제소스 (0) | 2017.11.07 |
---|---|
자바 스노우크래프트 소스 (0) | 2010.11.26 |
자바 스윙 화면 중간에 보이는 클래스 (0) | 2010.10.25 |