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