JAVA/JAVA 연습

HashMap과 액션리스너를 이용하여 로그인창 만들기

오늘의 진 2022. 8. 6. 14:07

 해쉬맵 안에 비밀번호와 아이디 값을 담는다.

여기서 주의할 점은 for문을 이용하여 값을 put해주려고 했는데 class 자체에서는 안된다 ! 

메소드 안에서for문을 작성해주어야 함

HashMap을 이용한 이유  : Map의 키는 중복값을 허용하지 않음. 즉 id도 중복되지 않게 작성 가능.

핸들러 방식으로 작성하여주었다. 

package ja08;

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashMap;
import java.util.Iterator;

public class Login extends Frame {
	HashMap map = new HashMap();

	String[] id = { "aaaa", "abcd", "take", "love" };
	String[] pw = { "1234", "a123", "7777", "vovo" };

	// 화면구성
	Label lid, lpw;
	TextField tid, tpw;
	Button ok;

	public Login() {
		super("Login Test");

		for (int i = 0; i < id.length; i++) {
			map.put(id[i], pw[i]);
		}

		lid = new Label("ID", Label.RIGHT);
		lpw = new Label("PASSWORD", Label.RIGHT);
		ok = new Button("ok");
		tid = new TextField(10);
		tpw = new TextField(10);
		setLayout(new FlowLayout());

		// 이벤트 달기
		tid.addActionListener(new Handeler());
		tpw.addActionListener(new Handeler());

		add(lid);
		add(tid);
		add(lpw);
		add(tpw);
		add(ok);
		setSize(450, 800);
		setVisible(true);

	}

	class Handeler implements ActionListener {

		@Override
		public void actionPerformed(ActionEvent e) {

			String id = tid.getText();
			String pw = tpw.getText();

			if (!map.containsKey(id)) {
				System.out.println("존재하지 않는 ID입니다.");
				tid.requestFocus();
				tid.selectAll();

			} else if (!(map.get(id).equals(pw))) {
				System.out.println("비밀번호가 틀렸습니다.");
				tpw.requestFocus();
				tpw.selectAll();

			} else {
				System.out.println("로그인 하였습니다.");
			}

		}

	}

	public static void main(String[] args) {

		new Login();

	}

}

구현모습