본문 바로가기

개발하자/JAVA문제풀이

15.01.25 메모장 만들기 1차 과제 (찾기 기능만)

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);
 }
}