메모장 입니다2
JAVA] ActionListner 를 이용한 동적 기능 구현 본문
0. ActionListener 인터페이스
-버튼이 클릭되었을 때, 그에 따른 코드가 실행되게 구현 가능.
-구성
1) 프레임 클래스 내에 MyEventListener(implement Action Listener) 이너클래스 구현.
> void actionPerformed(ActionEvent e) 오버라이딩 메소드 구현 //이벤트 발생시 실질적으로 호출되는 메소드
2) 원하는 버튼에 MyEventListener 클래스 객체를 등록
> menuItemNew.addActionListener(new MyEventListener());
3) 버튼 클릭시 MyEventListener::void actionPerformed(ActionEvent e)가 호출
>ActionEvent e: 발생한 이벤트 값
>> 조건문으로 e를 확인하여 관련된 코드를 실행
1. New 기능 만들기(새 글)
//MyNoteFrame 생성자
{
addEventListener(); //이벤트 리스너 등록 메소드 호출
}
//addEventListener() 메소드
menuItemNew.addActionListener(new MyEventListener()); //New 버튼에 이벤트 처리를 위한 클래스 객체 등록
//MyEventListener 클래스
class MyNoteFrame
{
class MyEventListener implement ActionListener
{
@Override
public void actionPerformed(ActionEvent e)
{
// TODO Auto-generated method stub
Object o = e.getSource();
if(o == menuItemNew || o == toolNew) //발생한 이벤트가 menu의 New단추이거나 (이미지버튼인)toolNew이면 {
this.newDocument(); //new에 관련된 코드가 담긴 newDocument() 실행
}
}
}//class MyEventListener
}//class MyNoteFrame
//newDocument() 메소드
public void newDocument()
{
this.checkRemindData();//작업중인 데이터가 남아있을 때 저장여부 확인
textArea.setText(""); //텍스트 창을 초기화
textArea.requestFocus(); //커서를 깜빡임(중요하지 않음)
}
//checkRemindData() 메소드
public void checkRemindData()
{
int ret;
//save
if(!textArea.getText().equals("")) //현재 텍스트창이 공백이 아니라면(작업 데이터가 남아있다면)
{
ret = JOptionPane.showConfirmDialog(MyNoteFrame.this, "작업 내용이 남아있습니다. \n저장하시겠습니까?");
if(ret == JOptionPane.YES_OPTION) //클릭한 버튼이 YES라면
{
if(this.saveDocument() == false)
return ;
}
}//save if
}
-JOptionPane.showConfirmDialog(MyNoteFrame.this, "작업 내용이 남아있습니다. \n저장하시겠습니까?");
:MyNoteFrame에 소속되는, '예/아니오/취소' 버튼이 담긴 메시지창을 띄움.
>클릭한 버튼 정보는 반환됨.
>메시지창 모습
2.Open 기능 구현(저장된 텍스트 파일의 내용을 불러옴)
//리스너 등록 부분은 모두 동일하므로 생략
{
/* 생....략 */
}
//openDocument()
{
checkRemindData(); //작업중인 데이터 남아있는지 Save 여부(이하 생략)
//open
JFileChooser openChooser = new JFileChooser();
int ret = openChooser.showOpenDialog(MyNoteFrame.this); // 탐색기에서 파일을 고를 수 있는 메시지창이 생성됨.
if(ret == JFileChooser.APPROVE_OPTION)
{
File file = openChooser.getSelectedFile(); //선택한 파일정보를 불러옴.
try {
Scanner sc = new Scanner(file); //
String txt = "";
StringBuilder sb = new StringBuilder(txt);
while(sc.hasNextLine())
{
sb.append(sc.nextLine() + "\n");
}
txt = sb.toString();
textArea.setText(txt);
/* 혹은 textArea.setText(""); textArea.append(sc.nextLine() + "\n")l; 로 대체 가능 */
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}//open if
}
>JFileChooser::showOpenDialog() 메시지 창
3.Save 기능
//boolean saveDocument() 메소드
{
JFileChooser saveChooser = new JFileChooser();
int ret = saveChooser.showSaveDialog(MyNoteFrame.this); //save 파일 선택창이 나타남.
if(ret == JFileChooser.APPROVE_OPTION)
{
File tempFile = saveChooser.getSelectedFile();
String saveFilePath = tempFile.getPath();
PrintWriter fw;
try {
fw = new PrintWriter(new File(saveFilePath+".txt")); //txt확장자 자동 생성
fw.write(textArea.getText());
fw.flush(); //파일 버퍼에 저장된 것을 파일에 보냄(저장)
fw.close(); //파일 스트림 종료
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return true;
}//if
return false;
}
>JFileChooser::showSaveDialog() 메시지 창
4.Exit 기능 구현(프로그램 종료)
//리스너 등록
//exitDocument
{
checkRemindData();
MyNoteFrame.this.dispose(); // JFrame 메모리 해제
System.exit(0); //프로세스 종료
}
>Inner 클래스에서 Outter 클래스 멤버 접근 방법
Outter Class Name.this.member
'Study > Programming' 카테고리의 다른 글
Windows] API - 1) 개요 (0) | 2017.08.08 |
---|---|
파이썬] brude force source (0) | 2017.08.08 |
notepad++ 를 이용하여 컴파일 하기 (0) | 2017.08.08 |
파이썬] ROL, ROR 연산 (0) | 2017.08.08 |
윈도우 역사, 장점 (0) | 2017.08.08 |