어떤 분께서 질문주셔서 이제 로그인과, 로그인화면, 그리고 접속 후 화면관리하는 것들을 연결해봅니다.^^;
먼저 잠깐 기초적인 설계와 간단한 수정들을 해봅니다.
보통 자바코딩을 처음할때는 뷰 화면에서 데이터액세스까지 처리하는데, 이러면 안된다는 것을 적고 싶었습니다.
예외처리를 어디서 잡아야 하고, 흐름은 어떻게 할지 따로 한번 생각해주세요 :)
기초적설계와 수정
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();
}
}
}
음..이정도로 일단 마치겠습니다. 다음번 영상은 조금 더 꼼꼼히 작성해보도록 하겠습니다.
흙 ㅠ

