메모장 프로그램 구현해보기
package ex9_memo;
import java.awt.Color;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class Memo {
public static void main(String[] args) {
JFrame jf = new JFrame("메모장");
JPanel jp = new JPanel();
jp.setBackground(Color.CYAN);
jp.setLayout(null);
JTextField jtf = new JTextField();
JButton jb_input = new JButton("확인");
JTextArea jta = new JTextArea();
JButton jb_save = new JButton("저장");
JButton jb_quit = new JButton("종료");
jtf.setBounds(10, 10, 170, 30);
jb_input.setBounds(180, 10, 60, 30);
jta.setBounds(10, 50, 230, 290);
jb_save.setBounds(10, 350, 110, 30);
jb_quit.setBounds(130, 350, 110, 30);
jp.add(jtf);
jp.add(jb_input);
jp.add(jta);
jp.add(jb_save);
jp.add(jb_quit);
jf.add(jp);
jf.setBounds(1500, 200, 270, 440);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jb_input.setEnabled(false); // 처음 실행시 확인버튼 비활성화
jtf.getDocument().addDocumentListener(new TextAdapter(jtf, jb_input)); // 텍스트필드내 텍스트 유무에 따른 확인버튼 활성화
jb_input.addActionListener(new InputButtonAdapter(jtf, jta)); // 확인버튼 구현
jb_save.addActionListener(new SaveButtonAdapter(jta)); // 저장버튼 구현
jb_quit.addActionListener(new QuitButtonAdapter()); // 종료버튼 구현
}
}

확인버튼 활성/비활성 어댑터
package ex9_memo;
import javax.swing.JButton;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
public class TextAdapter implements DocumentListener {
private JTextField jtf;
private JButton jb_send;
public TextAdapter(JTextField jtf, JButton jb_send) {
this.jtf = jtf;
this.jb_send = jb_send;
}
@Override
public void insertUpdate(DocumentEvent e) {
change();
}
@Override
public void removeUpdate(DocumentEvent e) {
change();
}
@Override
public void changedUpdate(DocumentEvent e) {
change();
}
public void change() { // 텍스트 필드의 문자열의 길이가 0이면 확인버튼 비활성화 아니면 활성화
if (jtf.getText().length() == 0) {
jb_send.setEnabled(false);
} else {
jb_send.setEnabled(true);
}
}
}

확인버튼 구현 어댑터
package ex9_memo;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class InputButtonAdapter implements ActionListener{
private JTextField jtf;
private JTextArea jta;
public InputButtonAdapter(JTextField jtf, JTextArea jta) {
this.jtf = jtf;
this.jta = jta;
}
@Override
public void actionPerformed(ActionEvent e) {
jta.append(jtf.getText()+"\n"); // 텍스트 필드의 문자열을 텍스트 에어리어에 붙인다
jtf.requestFocus(); // 텍스트 필드로 다시 커서를 옮긴다
jtf.setText(""); // 텍스트 필드의 내용을 비운다
}
}

저장버튼 구현 어댑터
package ex9_memo;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import javax.swing.JTextArea;
public class SaveButtonAdapter implements ActionListener {
private JTextArea jta;
public SaveButtonAdapter(JTextArea jta) {
this.jta = jta;
}
@Override
public void actionPerformed(ActionEvent e) {
try {
FileOutputStream fos = new FileOutputStream("src/ex9_memo/Memo.txt");
OutputStreamWriter osw = new OutputStreamWriter(fos);
osw.write(jta.getText());
osw.close();
fos.close();
} catch (Exception e1) {
e1.printStackTrace();
}
}
}


종료버튼 구현 어댑터
package ex9_memo;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class QuitButtonAdapter implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
}
하단의 종료 버튼을 누를 경우 우상단 x 버튼을 눌러 프로그램을 종료하듯이 꺼진다.