자기 개발과 IT 프로그래밍을 위한 여행

물처럼 흐르는 시간, 그 속에서의 여행

기초 PC 개발부/Java 개발청

간단한 SWT 프로젝트

창조의 새싹 2025. 4. 2. 07:08
728x90
더보기

버전

이클립스 : 2020-12(4.18.0)
자바 : JDK12.0.1
MySQL 및 워크벤치, 커넥터J : 8
windowbuilder : 1.10.0

https://lamlic36.tistory.com/87

 

이클립스 설치와 WindowBuilder 설정 방법

이클립스 설치 및 WindowBuilder 설정 방법Java GUI 프로그래밍을 시작하려면, 이클립스(Eclipse) 설치와 함께 WindowBuilder 설정이 필요합니다.이 글에서는 이클립스 IDE의 개요부터 설치, 그리고 WindowBuilder

lamlic36.tistory.com

https://lamlic36.tistory.com/86

 

Mysql 설치 및 설정

MySQL 설치 및 Workbench 설정 가이드데이터베이스를 처음 다루거나, 개발용으로 MySQL을 설치하려는 분들을 위한 가이드입니다.이 글에서는 MySQL과 Workbench의 개념부터 설치, 설정까지 단계별로 정리

lamlic36.tistory.com

앞서 Mysql과 이클립스, WindowBuilder 설정 이후, 간단한 실습을 진행해 보겠습니다.

WindowBuilder 를 사용하기 위해 우선 현재 프로젝트의 BuildPath 에서 Libraries 탭 - Classpath - Add External Jars - 이클립스 설치 위치에서 plugins 폴더 - swt 검색 - org.eclipse.swt.win32_x86_64_버전.jar 추가

Connector J 까지 추가 된 부분 확인

Apply&Close.

반응형

실제 Java 코드에 들어가기 전에 이번 실습은 Main Class 에서 DB 연결을 확인한 다음,
WindowBuilder로 제작된 Form 에서 로그인 후 다른 페이지로 이동하는 것입니다.

//DB 확인
show databases;

//DB생성
create database swtT1 default CHARACTER SET UTF8;

//DB사용
use swtT1;

//테이블 생성
CREATE TABLE user (
    id VARCHAR(50) PRIMARY KEY,
    pw VARCHAR(50) NOT NULL,
    name VARCHAR(100) NOT NULL
);

//테이블 Row 추가
INSERT INTO user (id, pw, name) VALUES ('user01', 'user01!', '홍길동');

//추가된 Row 확인
select * from user;

위와 같이 DB에 실습을 위한 테이블과 값을 넣어두겠습니다.

이후, JavaProject 'SWTwithMysql' 을 생성.

dao, dbSet, dto 패키지를 생성하여 DB 접속 및 사용을 위한 클래스를 생성하겠습니다.

package dbSet;

import java.sql.Connection;
import java.sql.DriverManager;

public class DBUtil {
    private static final String URL = "jdbc:mysql://localhost:3306/swtT1?useSSL=false&serverTimezone=UTC";
    private static final String USER = "당신의 DB id";
    private static final String PASSWORD = "당신의 DB pw";

    public static Connection getConnection() throws Exception {
        Class.forName("com.mysql.cj.jdbc.Driver");
        return DriverManager.getConnection(URL, USER, PASSWORD);
    }
}

DBUtil 에서는 접속을 위한 준비를 해주었습니다.
url에 ip 와 db 명을 기입해주고 id, pw를 설정합니다.

package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import dbSet.DBUtil;
import dto.UserDTO;

public class UserDAO {
    public UserDTO login(String id, String pw) {
        String sql = "SELECT * FROM user WHERE id = ? AND pw = ?";
        try (Connection conn = DBUtil.getConnection();
             PreparedStatement pstmt = conn.prepareStatement(sql)) {

            pstmt.setString(1, id);
            pstmt.setString(2, pw);
            ResultSet rs = pstmt.executeQuery();

            if (rs.next()) {
                return new UserDTO(rs.getString("id"), rs.getString("pw"), rs.getString("name"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

UserDAO 입니다.

Data Access Object 클래스로서, DB 조회, 삭제, 수정, 입력 등의 쿼리를 처리해 줄 클래스입죠.

package dto;

public class UserDTO {
    private String id;
    private String pw;
    private String name;

    public UserDTO(String id, String pw, String name) {
        this.id = id;
        this.pw = pw;
        this.name = name;
    }

    public String getId() { return id; }
    public String getPw() { return pw; }
    public String getName() { return name; }
}

UserDTO 클래스입니다.

Data Transfer Object 클래스는 데이터 전송 객체, DB 칼럼에 맞추어 송수신할 상자를 만들어준다 생각하시면 될 듯 합니다.

import dbSet.DBUtil;

import java.sql.Connection;

public class Main {
    public static void main(String[] args) {
        try (Connection conn = DBUtil.getConnection()) {
            System.out.println("DB 연결 성공!");
            new LoginForm().open();
        } catch (Exception e) {
            System.out.println("DB 연결 실패!");
            e.printStackTrace();
        }
    }
}

Main에서는 DB 접속이 정상적으로 이루어지는지 확인한 다음,
LoginForm을 호출해줍니다.

WindowBuilder 사용을 위해서

이후 코드 3개인 BaseForm, LoginForm, HomeForm 은 WindowBuilder - SWT - shell 로 생성해주겠습니다.

 

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;


import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public abstract class BaseForm{
    protected Shell shell;
    protected Display display;

    public void open() {
        display = Display.getDefault();
        shell = new Shell(display);
        createContents();
        shell.open();
        shell.layout();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) display.sleep();
        }
    }

    protected abstract void createContents();
}

앞으로 만들어줄 Login과 Home 폼의 기초가될 BaseForm을 생성.

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

import org.eclipse.swt.widgets.*;
import org.eclipse.swt.SWT;

import dao.UserDAO;
import dto.UserDTO;

public class LoginForm extends BaseForm {
    private Text txtId;
    private Text txtPw;

    @Override
    protected void createContents() {
        shell.setSize(300, 200);
        shell.setText("로그인");

        Label lblId = new Label(shell, SWT.NONE);
        lblId.setText("ID:");
        lblId.setBounds(30, 30, 60, 20);

        txtId = new Text(shell, SWT.BORDER);
        txtId.setBounds(100, 30, 150, 20);

        Label lblPw = new Label(shell, SWT.NONE);
        lblPw.setText("PW:");
        lblPw.setBounds(30, 70, 60, 20);

        txtPw = new Text(shell, SWT.BORDER | SWT.PASSWORD);
        txtPw.setBounds(100, 70, 150, 20);

        Button btnLogin = new Button(shell, SWT.PUSH);
        btnLogin.setText("로그인");
        btnLogin.setBounds(100, 110, 80, 30);

        btnLogin.addListener(SWT.Selection, e -> {
            String id = txtId.getText();
            String pw = txtPw.getText();
            UserDAO dao = new UserDAO();
            UserDTO user = dao.login(id, pw);
            if (user != null) {
                shell.dispose();
                new HomeForm(user).open();
            } else {
                MessageBox msg = new MessageBox(shell, SWT.ICON_ERROR | SWT.OK);
                msg.setText("로그인 실패");
                msg.setMessage("ID 또는 PW가 올바르지 않습니다.");
                msg.open();
            }
        });
    }
}

로그인 기능을 위한 UI를 지니고 있으며
로그인 버튼 클릭시, addListener 이벤트를 통해 입력창의 id, pw 값을 가져와서 dao.login 함수에 매개변수로 던져줍니다.

처리결과는 DTO로 받아 문제가 없을 시, HomeForm 을 실행해 줄겁니다.

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.SWT;

import dto.UserDTO;

public class HomeForm extends BaseForm {
    private UserDTO user;

    public HomeForm(UserDTO user) {
        this.user = user;
    }

    @Override
    protected void createContents() {
        shell.setSize(300, 150);
        shell.setText("홈 화면");

        Label lblWelcome = new Label(shell, SWT.NONE);
        lblWelcome.setText("환영합니다, " + user.getName() + "님!");
        lblWelcome.setBounds(50, 50, 200, 20);
    }
}

 

실행해 보시면 Console 에서 DB 연결 안내를 해준 이후 윈도우 폼 화면을 보여줍니다.

mysql 에 저장한 id / pw 로 입력 후 로그인 버튼 클릭 시

HomeForm 에서는 DTO가 가진 user 의 name 정보를 출력해줌으로서.

간단한 SWT + Mysql 실습을 종료하겠습니다.
(정식으로 하자면, input field 가 좁아 터져 보이니 불편함이 큽니다만, 넘어가겠습니다.)

WindowBuilder를 이용해 화면을 보여주고 있을 뿐.
일반 Console에 System.out.print 방식으로 출력해주고 입력받기로도 변형이 가능한 코드입니다.

728x90
반응형

'기초 PC 개발부 > Java 개발청' 카테고리의 다른 글

실행가능한 Jar 파일로 만들기  (0) 2025.04.02
SWT VS Swing  (0) 2025.04.02
이클립스 설치와 WindowBuilder 설정 방법  (0) 2025.04.02
JAVA 설치 및 Path 설정  (0) 2025.04.02