자바로 PC방 프로그램만들기

6초식. Login 과 뷰화면간 연결

어떤 분께서 질문주셔서 이제 로그인과, 로그인화면, 그리고 접속 후 화면관리하는 것들을 연결해봅니다.^^;

먼저 잠깐 기초적인 설계와 간단한 수정들을 해봅니다.

급하게 코딩하다보니, 예외처리흐름이 무척 안 좋습니다-_- 메인클래스도 그 역할이 뭔가 애매하긴 한데..
보통 자바코딩을 처음할때는 뷰 화면에서 데이터액세스까지 처리하는데, 이러면 안된다는 것을 적고 싶었습니다.

예외처리를 어디서 잡아야 하고, 흐름은 어떻게 할지 따로 한번 생각해주세요 :) 

기초적설계와 수정

LoginTest를 dao(데이터 접근 객체: Data Access Object ) 패키지의 객체로 승격시켜주고 메소드이름을 좀 바꿔줬습니다. 그리고 static을 제거했습니다. 추후 깃헙에 있는 소스코드를 참고하시면 됩니다 :)

영상에서 안 보이게 좀 더 수정을 한 게 있습니다;; ManageView를 FrameManage 로 바꿔주었습니다;

 

그후 먼저 로그인화면의 이벤트 처리

자바 스윙에서 이벤트를 처리하는 방법에는 세가지가 있습니다만 이 강좌에선 거의 한가지 방법만 씁니다.
핵심은 ActionListener 라는 인터페이스를 구현한 클래스를 버튼.setActionListener()로 전달해주는 것인데,

여기서는 FrameLogin 화면에서 implement ActionListener 하여 인터페이스를 구현하기로 한 후, 버튼에 자기자신을 넣어주면 (this) FrameLogin 에 있는 actionPerform() 메소드안을 실행합니다.

actionPerform안의 최종 소스는 다음과 같습니다. ( main()  함수는 또 넣어줘야 됩니다;; )
깃헙소스를 참고하시는 게 제일 나을 것같습니다;  

참고 깃헙 주소 : https://github.com/arahansa/pcbang/releases

 

@Override
public void actionPerformed(ActionEvent e) {
    System.out.println("액션 체크 됨 ");
	System.out.println(loginTextField.getText());
	System.out.println(passwordField.getPassword());
	
	//사용자가 값을 넣었는지 체크한 후에
	if(loginTextField.getText().equals("")|| new String(passwordField.getPassword()).equals("")){
		JOptionPane.showMessageDialog(null, "아이디나 비밀번호를 입력해주세요", "아이디나 비밀번호 입력", JOptionPane.INFORMATION_MESSAGE);
	}else{
		//사용자가 값을 넣었으면 로그인 체크를 한다. 
		System.out.println("사용자 로그인을 해야되는데.. 데이터베이스에 접근해야 됩니다. ");
		boolean logincheck = daoLogin.loginCheck(loginTextField.getText(), new String(passwordField.getPassword()));
		System.out.println("로그인 성공여부는 :"+logincheck);
		
		if(logincheck){
			//로그인에 성공한 경우
			JOptionPane.showMessageDialog(null, "로그인 성공", "로그인 성공", JOptionPane.INFORMATION_MESSAGE);
			//TODO main 에게 이거는 닫아주고, 새로운 매니지 뷰 화면 열어줘 요청
			main.showFrameManage(this);
		}else{
			//로그인에 실패한 경우
			JOptionPane.showMessageDialog(null, "로그인 실패", "로그인 실패", JOptionPane.INFORMATION_MESSAGE);
		}
	}
}

 

 main 함수 안의 내용 입니다. 로그인 패널만 실행시키기 위해서 main() 함수안의 내용을 넣어본 것입니다.

데이터베이스를 초기화하고, 데이터액세스오브젝트(DAO)를 세팅해주는 것을 보시면 됩니다! 

// 메인
public static void main(String[] args) throws Exception {
     
FrameLogin frameLogin = new FrameLogin();
    
    H2DB_Initializer hdInitializer = new H2DB_Initializer();
    hdInitializer.initDatabase();
    
    DaoLogin daoLogin = new DaoLogin();
    daoLogin.insertUser();
    
    frameLogin.setDaoLogin(daoLogin);
}

 

이제 이 모든 것들을 연결해줄 Main 클래스입니다. 매니지화면에 있던  main의 내용을 따로 메소드로 빼서 연결시켜주는 역할을 합니다.
 

package main;

import asset.Setting;
import view.FrameLogin;
import view.FrameManage;
import dao.DaoLogin;
import dao.H2DB_Initializer;

public class Main {
    
	private FrameManage frameManage;
	private FrameLogin frameLogin;
	
	private DaoLogin daoLogin;
	
	
	public static void main(String[] args) throws Exception {
		Main main = new Main();
		main.frameLogin = new FrameLogin();
		main.frameLogin.setMain(main);
        //database 초기화(테이블 만듦)
        H2DB_Initializer hdInitializer = new H2DB_Initializer();
        hdInitializer.initDatabase();
        //login을 위한 데이터 액세스 오브젝트 만들고, 사용자 입력.
        DaoLogin daoLogin = new DaoLogin();
        daoLogin.insertUser();
        //프레임에 dao 주입
        main.frameLogin.setDaoLogin(daoLogin);
	}
	
	public void showFrameManage(FrameLogin frameLogin){
		frameLogin.dispose();
		FrameManage manageView = new FrameManage();
		try {
			manageView.setRectangles(FrameManage.class, manageView, Setting.class, Setting.getInstance());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
}

 

음..이정도로 일단 마치겠습니다. 다음번 영상은 조금 더 꼼꼼히 작성해보도록 하겠습니다.

흙 ㅠ

댓글

댓글 본문
  1. 안형우
    main과 FrameManage에서 try문 안에 있는 Setting.getInstance() 전체가 빨간 밑줄이 뜹니다... 왜 이런걸까요??? 그리고 Setting.까지 치면 보기가 여러 개가 나오는데 그 안에 getInstance는 없네요... 어디서 문제가 있는건지 제발 답변좀 부탁드립니다...ㅠㅜ
버전 관리
아라한사
현재 버전
선택 버전
graphittie 자세히 보기