awt를 이용한 메모장만들기
현재 찾기기능만 구현
최초실행화면입니다.
편집에 찾기버튼이 있습니다. 버튼을 누르면 찾기창이 나타납니다.
임의로 내용을 입력한 후 찾기 버튼을 눌러봅니다.
찾기창에 찾을 내용을 입력하고 다음 찾기를 클릭하면 찾아진 내용이 선택됩니다.
반복적으로 다음찾기를 클릭하면 차례대로 찾아진 내용이 선택됩니다.
대/소문자 구분을 체크해제하면 대소문자 구분없이 내용을 찾게 됩니다.
검색이 끝났다면 찾을 수 없다는 창이 나타납니다.
[소스보기]
package notepad;
import java.awt.Button;
import java.awt.Checkbox;
import java.awt.FileDialog;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.Panel;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
class Search_Frame extends Frame implements ActionListener {
Panel Search_panel;
Panel cancel_panel;
Panel check_panel;
Checkbox checkbox;
Label content_label;
Label check_label;
TextField content_txt;
Button next_search_btn;
Button cancel;
MyFrame myframe;
int num = 0;
String search_input;
int search_index;
String str;
Search_Frame(String Title, MyFrame f) {
super(Title);
myframe = f;
Search_panel = new Panel();
cancel_panel = new Panel();
check_panel = new Panel();
checkbox = new Checkbox(null, true, null);
content_label = new Label("찾을 내용 : ");
check_label = new Label("대/소문자 구분");
content_txt = new TextField(30);
next_search_btn = new Button("다음 찾기");
cancel = new Button("취 소");
Search_panel.add(content_label);
Search_panel.add(content_txt);
Search_panel.add(next_search_btn);
cancel_panel.add(cancel);
check_panel.add(checkbox);
check_panel.add(check_label);
add(Search_panel, "North");
add(cancel_panel, "East");
add(check_panel, FlowLayout.LEFT);
next_search_btn.addActionListener(this);
cancel.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand() == "다음 찾기") {
search_input = content_txt.getText();
search_index = myframe.ta.getText().indexOf(search_input, num);
if (checkbox.getState() == false) {
System.out.println("대소구분안함");
search_input = content_txt.getText().toLowerCase();
search_index = myframe.ta.getText().toLowerCase()
.indexOf(search_input, num);
}
str = myframe.ta.getText().replaceAll("\\r", "");
myframe.ta.setText(str);
myframe.ta.requestFocus();
for (int aa = 0; aa < str.length(); aa++) {
if (search_index == aa) {
myframe.ta.select(search_index,
search_index + search_input.length());
num = (search_index + search_input.length());
}
}
if (num != search_index + search_input.length()) {
End end = new End("경고창", search_input);
end.setVisible(true);
end.setBounds(200, 200, 200, 100);
System.out.println("다찾음");
}
} else {
this.setVisible(false); // 찾기창닫기
}
}
}
class End extends Frame {
End(String Title, String input) {
super(Title);
Label msg = new Label();
msg.setText("\"" + input + "\"" + "를 찾을 수 없습니다.");
add(msg);
}
}
class MyFrame extends Frame implements ActionListener {
MenuBar menuBar;
Menu file_menu;
Menu edit_menu;
MenuItem open_mi;
MenuItem search_mi;
TextArea ta;
MenuItem save_menu;
MyFrame(String Title) {
super(Title);
menuBar = new MenuBar();
file_menu = new Menu("파일");
edit_menu = new Menu("편집");
open_mi = new MenuItem("열기");
search_mi = new MenuItem("찾기");
ta = new TextArea();
save_menu = new MenuItem("저장");
open_mi.addActionListener(this);
search_mi.addActionListener(this);
file_menu.add(open_mi);
file_menu.addSeparator();
file_menu.add(save_menu);
edit_menu.add(search_mi);
menuBar.add(file_menu);
menuBar.add(edit_menu);
setMenuBar(menuBar);
add(ta);
}
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand() == "열기") {
FileDialog d = new FileDialog(new Frame());
d.setLocation(300, 300);
d.setVisible(true);
} else if (e.getActionCommand() == "찾기") {
Search_Frame search_frame = new Search_Frame("찾기", this);
search_frame.setBounds(300, 200, 410, 110);
search_frame.setVisible(true);
System.out.println("찾기버튼클릭");
}
}
}
class Main {
public static void main(String args[]) {
MyFrame f = new MyFrame("메모장");
f.setBounds(200, 200, 600, 400);
f.setVisible(true);
}
}
'개발하자 > JAVA문제풀이' 카테고리의 다른 글
15.01.14 Lotto 프로그램(DB연동) (0) | 2015.01.21 |
---|---|
15.01.21 달력과제 2차(awt) (0) | 2015.01.21 |
15.01.20 달력과제 1차(콘솔창출력) (0) | 2015.01.20 |
2015.01.10 awt와 DB연동 과제 (0) | 2015.01.11 |
2015.01.08 awt 사칙연산 과제 (0) | 2015.01.08 |