JAVA 기초

JAVA 22-2

Vanillwa 2023. 9. 12. 10:31

 

메모장 프로그램 구현해보기

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

위의 상태에서 저장버튼을 누른 경우

 

정해진 경로에 Memo.txt가 출력된다.

 


 

종료버튼 구현 어댑터

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 버튼을 눌러 프로그램을 종료하듯이 꺼진다.

 


 

'JAVA 기초' 카테고리의 다른 글

JAVA 23-2  (0) 2023.09.12
JAVA 23-1  (0) 2023.09.12
JAVA 22-1  (0) 2023.09.12
JAVA 21-2  (0) 2023.09.08
JAVA 21-1  (0) 2023.09.08