관리 메뉴

nkdk의 세상

자바 Language 14일째 메모장 본문

My Programing/JAVA

자바 Language 14일째 메모장

nkdk 2008. 3. 8. 01:12
// 레이아웃에 대한 설명을 하겠습니다.

package gui;
import java.awt.*;
import java.awt.event.*;

public class LayoutTest extends Frame implements ActionListener{
Button btnGo;
TextField txtBun=new TextField(" ");
TextField txtIrum=new TextField(" "); // 텍스트 상
CardLayout card=new CardLayout(); // CardLayout 을 넣음
Panel pn1=new Panel();
Panel pn2=new Panel();
Panel pn3=new Panel();
Panel pn4=new Panel();
Panel pn5=new Panel();
Panel pn6=new Panel();
GridBagConstraints c; // 그리드백 영역 내에 구조를 설정 할때 사용함.
public LayoutTest() {
this.setLayout(new GridLayout(2,1));
// 그리드의 첫번째 행
Label lbl1=new Label("번호: ");
pn1.add(lbl1); // 패널은 기본적으로 FlowLayOut이다. Frame은 기본적으로 borderLayout이다.
pn1.add(txtBun);
pn1.setBackground(Color.YELLOW);

Label lbl2=new Label("이름:");
pn2.add(lbl2);
pn2.add(txtIrum);
pn2.setBackground(Color.CYAN);

pn3.setLayout(card);
pn3.add("aa",pn1);
pn3.add("bb",pn2); // pn1과 pn2 를 겹치게 만들었다.

btnGo = new Button("확인");
btnGo.addActionListener(this);

pn4.add(pn3); // flowLayout 이다.
pn4.add(btnGo);
pn4.setBackground(Color.RED);
pn5.setLayout(new BorderLayout());
pn5.add("Center", pn4);
pn5.add("East", new Label("동"));
pn5.add("West", new Label("서"));
pn5.add("South", new Label("남", Label.CENTER));
pn5.add("North", new Label("북", Label.CENTER));

// 그리드의 두번째 행에 대한 디자인
pn6.setLayout(new GridBagLayout());
pn6.setBackground(Color.ORANGE);
c=new GridBagConstraints();
c.weightx=1;
c.weighty=1;
c.fill=GridBagConstraints.BOTH; // 채우는 것은 별도의 메소드를 만들어 준다. (layout)
layout(new Button("1"), 0,0,1,1);
layout(new Button("2"), 1,0,1,1);
layout(new Button("3"), 0,1,2,1);
// Frame에 붙이기
this.add(pn5);
this.add(pn6);
//this.add(pn1); // this 는 프레임을 이야기
// this.add(pn2); // this 는 프레임을 이야기
setBounds(200,150,400,300);
setVisible(true);

addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
// 레이아웃 메소드를 하나 만들어 주었다.
public void layout(Component obj, int x, int y, int w, int h) {
c.gridx=x;
c.gridy=y;
c.gridheight=h;
c.gridwidth=w;
pn6.add(obj, c);
}

public void actionPerformed(ActionEvent ae) {
//if(ae.getSource().equals(btnGo)) // 객체 이름으로 비교도 되고
if(ae.getActionCommand().equals("확인")){ // 메세지를 가지고 비교를 할 수도 있다.
btnGo.setLabel("클릭");
card.show(pn3, "bb");
}
else {btnGo.setLabel("확인");
card.show(pn3, "aa");
}
}

public static void main(String[] args) {
new LayoutTest();
}
}

지금부터 메모장에 대한 설명이 나갑니다.


package gui;

import java.awt.*;
import java.awt.event.*;
import java.io.*;

public class Memojang extends Frame implements ActionListener {
private Button btnCopy, btnPaste,btnDel,btnCut;
private String copyText;
private TextArea txtNote;
private Panel pn;

PopupMenu popup;
MenuItem m_white, m_blue, m_yellow, m_exit;

public Memojang() {
super("메모장");
txtNote=new TextArea(10,40);
btnCopy=new Button("복사");
btnPaste=new Button("붙여넣기");
btnDel=new Button("삭제");
btnCut=new Button("잘라내기");
btnCopy.addActionListener(this);
btnPaste.addActionListener(this);
btnDel.addActionListener(this);
btnCut.addActionListener(this);
pn=new Panel();
pn.add(btnCopy);
pn.add(btnPaste);
pn.add(btnDel);
pn.add(btnCut);
// pn.add(txtNote);
this.add("Center",txtNote);
this.add("South",pn);
txtNote.requestFocus();

// 메뉴 추가
MenuBar menubar = new MenuBar(); // 메뉴 바 추가
Menu mnuFile=new Menu("파일"); // 주 메뉴
MenuItem mnuOpen=new MenuItem("열기...");
MenuItem mnuSave=new MenuItem("저장...");
MenuItem mnuExit=new MenuItem("종료");
mnuFile.add(mnuOpen);
mnuFile.add(mnuSave);
mnuFile.addSeparator(); // 구분선을 만든다.
mnuFile.add(mnuExit);
menubar.add(mnuFile);

Menu mnuEdit=new Menu("편집"); // 주 메뉴
MenuItem mnuCopy=new MenuItem("복사", new MenuShortcut(KeyEvent.VK_C,false));
MenuItem mnuCut=new MenuItem("잘라내기", new MenuShortcut(KeyEvent.VK_X,false));
MenuItem mnuPaste=new MenuItem("붙여넣기", new MenuShortcut(KeyEvent.VK_V,false));
MenuItem mnuDel=new MenuItem("삭제", new MenuShortcut(KeyEvent.VK_DELETE,false));
mnuEdit.add(mnuCopy);
mnuEdit.add(mnuCut);
mnuEdit.add(mnuPaste);
mnuEdit.add(mnuDel);

Menu mnuHelp=new Menu("도움말"); // 주 메뉴
MenuItem mnuAbout=new MenuItem("메모장 정보");

Menu mnuEtc=new Menu("기타");
MenuItem mnuCalc=new MenuItem("계산기...");
MenuItem mnuFree=new MenuItem("프리셀...");
mnuEtc.add(mnuCalc);
mnuEtc.add(mnuFree);

mnuHelp.add(mnuAbout);
mnuHelp.add(mnuEtc);
menubar.add(mnuFile);
menubar.add(mnuEdit);
menubar.add(mnuHelp);

this.setMenuBar(menubar); // menubar를 프레임에 얹어 줌. 창에 setting 함.

mnuOpen.addActionListener(this);
mnuSave.addActionListener(this);
mnuExit.addActionListener(this);
mnuCopy.addActionListener(this);
mnuCut.addActionListener(this);
mnuPaste.addActionListener(this);
mnuDel.addActionListener(this);
mnuAbout.addActionListener(this);
mnuCalc.addActionListener(this);
mnuFree.addActionListener(this);

// 메뉴를 여기 까지 만들었음.
setBounds(150,150,300,250);
setVisible(true);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
// 팝업 메뉴
popup = new PopupMenu("팝업 메뉴");
Menu m_col=new Menu("색상 선택");
m_white=new MenuItem("흰색");
m_blue=new MenuItem("파랑");
m_yellow=new MenuItem("노랑");
m_exit=new MenuItem("마침");
m_white.addActionListener(this);
m_blue.addActionListener(this);
m_yellow.addActionListener(this);
m_exit.addActionListener(this);
m_col.add(m_white);
m_col.add(m_blue);
m_col.add(m_yellow);
m_col.addSeparator();
m_col.add(m_exit);
popup.add(m_col);
txtNote.add(popup); // 팝업 메뉴를 add 시킴.

txtNote.addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent me) {
if((me.getModifiers()==MouseEvent.BUTTON3_MASK)){
popup.show(txtNote,me.getX(), me.getY());
}
}
});
}

public void actionPerformed(ActionEvent ae) {

String command=ae.getActionCommand(); // command 가 값을 가지게 된다 어떤 값을 눌렀는지 알게 됨.
if(command.equals("복사")) {
copyText=txtNote.getSelectedText();
txtNote.requestFocus();
}
else if(command.equals("붙여넣기")) {
int pos=txtNote.getCaretPosition();
txtNote.insert(copyText, pos);
txtNote.requestFocus();
}
else if(command.equals("삭제")) {
int start=txtNote.getSelectionStart();
int end=txtNote.getSelectionEnd();
txtNote.replaceRange("", start, end);
txtNote.requestFocus();
}
else if(command.equals("잘라내기")) {
int start=txtNote.getSelectionStart();
int end=txtNote.getSelectionEnd();
copyText=txtNote.getSelectedText();
txtNote.replaceRange("", start, end);
txtNote.requestFocus(); // 메뉴만 있을 경우에는 필요 없다.
}
else if(command.equals("열기...")) {

FileDialog fd=new FileDialog(this,"열기",FileDialog.LOAD); // 저장에 관련된 다이얼로그 창을 만든다.
fd.setDirectory(".");
fd.setVisible(true);
if(fd.getFile()==null) return;

try{
String dfn=fd.getDirectory()+fd.getFile();
// System.out.println(dfn);
// Stream을 이용해 열기 작업 시작
BufferedReader in=new BufferedReader(new FileReader(dfn)); // 스트링은 소설 같은 자바를 잘 읽어 보아라.
txtNote.setText("");
String line;
while((line=in.readLine())!=null){
txtNote.append(line+"\n");
}
in.close();

this.setTitle("메모장"+fd.getFile());
}catch(Exception e) {
System.out.println("열기 오류: "+e);

}
}
else if(command.equals("저장...")) {
FileDialog fd=new FileDialog(this,"파일저장",FileDialog.SAVE); // 저장에 관련된 다이얼로그 창을 만든다.
fd.setDirectory(".");
fd.setVisible(true);
if(fd.getFile()==null) return;
try{
String dfn=fd.getDirectory()+fd.getFile();
// System.out.println(dfn);
// Stream을 이용해 저장 작업 시작
BufferedWriter out=new BufferedWriter(new FileWriter(dfn)); // 스트링은 소설 같은 자바를 잘 읽어 보아라.
out.write(txtNote.getText());
out.close();
}catch(Exception e) {
System.out.println("저장 오류: "+e);
}
}
else if(command.equals("종료")) {
System.exit(0);
}
else if(command.equals("메모장 정보")) {
new MemoDial(this);
}
else if(command.equals("계산기...")) {
try{ Runtime.getRuntime().exec("calc.exe");
}catch(Exception e) {}
}
else if(command.equals("프리셀...")) {
try{ Runtime.getRuntime().exec("freecell.exe");
}catch(Exception e) {}
}
else if(ae.getSource().equals(m_white)) // m_white 가 전역으로 와야 한다.
txtNote.setBackground(Color.white);
else if(ae.getSource().equals(m_blue))
txtNote.setBackground(Color.blue);
else if(ae.getSource().equals(m_yellow))
txtNote.setBackground(Color.yellow);
else if(ae.getSource().equals(m_exit))
System.exit(0);
}

public static void main(String[] args) {
new Memojang();
}
}


// 메모 다이얼 입니다.

package gui;

import java.awt.*;
import java.awt.event.*;

public class MemoDial extends Dialog implements ActionListener{
public MemoDial(Frame f) { // 반드시 프레임을 받아라 //창은 모달과 모달리스트가 있다.
super(f, "메모장이란",true);
Label lbl=new Label("자바를 통한 메모장", Label.CENTER);
Button btn=new Button("확인");
btn.addActionListener(this); // listener를 장착했음

this.setLayout(new BorderLayout());
this.add("Center", lbl);
this.add("South", btn);

this.setBackground(Color.cyan);
this.setBounds(100,100,200,300);
this.setVisible(true);
}

public void actionPerformed(ActionEvent ex) {
this.dispose(); // 현재 프레임 하나만 닫을 때 사용
}
}



14일차와 15일차와 더불어 제작되어진 것입니다. 오츠까레~^^