자바(Java) GUI 프로그램 도서 조회 시스템 (2) UI 구현해보기

송범·2024년 11월 5일

자바의 GUI 프로그래밍 -> JFrame을 이용해서 UI를 만들어보자.



import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
/*
BookDialog에서 수정이나 입력일 때 insert가 1이거나 또는 update도 1이면 성공
이 때 BookApp의 도서 목록 페이지를 새로고침 한다. -요구사항이 있다면
BookApp의 메소드를 BookDialog에서 호출해야 한다.
이 때 부모창의 주소원본을 가져야한다.
 */


public class BookApp extends JFrame implements ActionListener {

    BookDialog bd = new BookDialog(this);
    String imgPath = "D:\\workspace_java\\basic1\\src\\image\\book\\"; //이미지 경로

    JMenuBar menuBar = new JMenuBar();
    JMenu jm_file = new JMenu("File");
    JMenuItem jmi_dbcon = new JMenuItem("DB연결");
    JSeparator se_file = new JSeparator();

    JMenuItem jmi_exit = new JMenuItem("Exit");
    JMenu jm_edit = new JMenu("Edit");
    JMenuItem jmi_all = new JMenuItem("전체조회");
    JMenuItem jmi_ins = new JMenuItem("입력");
    JMenuItem jmi_det = new JMenuItem("상세보기");
    JMenuItem jmi_upd = new JMenuItem("수정");
    JMenuItem jmi_del = new JMenuItem("삭제");

    String [] data = {"도서번호","도서명","저자","출판사"}; //테이블 컬럼명

    DefaultTableModel tableModel = new DefaultTableModel(data, 0);
    JTable table = new JTable(tableModel);
    JScrollPane scrollPane = new JScrollPane(table);

    JToolBar jtBar = new JToolBar();
    JButton btn_all = new JButton("전체조회");
    JButton btn_det = new JButton("상세조회",new ImageIcon(imgPath+"detail.gif"));
    JButton btn_ins = new JButton("입력",new ImageIcon(imgPath+"new.gif"));
    JButton btn_upd = new JButton("수정",new ImageIcon(imgPath+"update.gif"));
    JButton btn_del = new JButton("삭제",new ImageIcon(imgPath+"delete.gif"));
    JButton time_out =new JButton("타임서버끝");

    public BookApp() {
        initDisplay();
    }
    

    public void refreshData(){
        System.out.println("새로고침 호출");
    }
    
    //입력일 때 호출 - 입력버튼 | 입력 메뉴 아이템
    public void insertActionPerformed(){
        System.out.println("BookApp.insertActionPerformed");
    }
    //상세보기일 때 호출 - 상세보기 버튼 | 상세보기 메뉴 아이템
    public void detailActionPerformed(){
        System.out.println("BookApp.detailActionPerformed");
        
    }
    //수정일때 호출 - 수정버튼 | 수정 메뉴 아이템 일 때
    public void updateActionPerformed(){
        System.out.println("BookApp.updateActionPerformed");
    }
    //삭제일 때 호출 - 삭제버톤|삭제 메뉴 아이템 일 때
    public void deleteActionPerformed(){
        System.out.println("BookApp.deleteActionPerformed");
    }
    
    
    

    public void initDisplay(){

		//이벤트 처리를 위한 메소드 호출
        btn_ins.addActionListener(this);
        btn_upd.addActionListener(this);
        btn_del.addActionListener(this);
        btn_all.addActionListener(this);
        btn_det.addActionListener(this);


        jmi_exit.addActionListener(this);
        jmi_ins.addActionListener(this);
        jmi_upd.addActionListener(this);
        jmi_del.addActionListener(this);





        jtBar.add(btn_all);
        jtBar.add(btn_det);
        jtBar.add(btn_ins);
        jtBar.add(btn_upd);
        jtBar.add(btn_del);
        jtBar.add(time_out);

        jm_file.add(jmi_dbcon);
        jm_file.add(se_file);
        jm_file.add(jmi_exit);

        jm_edit.add(jmi_all);
        jm_edit.add(jmi_det);
        jm_edit.add(jmi_upd);
        jm_edit.add(jmi_del);
        jm_edit.add(jmi_ins);
        jm_edit.add(jmi_det);

        menuBar.add(jm_file);
        menuBar.add(jm_edit);

        this.setJMenuBar(menuBar); //메뉴바는 배치하는 것이 아니고 this에 직접 붙임



        this.add(scrollPane, BorderLayout.CENTER);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.add("North",jtBar);
        this.setSize(700,600);
        this.setTitle("도서관리시스템");
        this.setVisible(true);

    }


    public static void main(String[] args) {
        //BookDialog bd = new BookDialog(this); 멤버는 언제 생성이 되는가? 내 자신 객체를 생성할 대 초기화 및 생성됨.
//        BookApp ba = new BookApp(); //this와 ba는 같은 주소번지를 가진다.
        //디폴트 생성자는 없을 때 자동으로 생성해 주지만 -> JVM
        //파라미터를 갖는 생성자는 파라미터를 예측할 수가 없어서 대신 못해준다.
        JFrame.setDefaultLookAndFeelDecorated(true);
        new BookApp();
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        Object source = e.getSource();
        if(source == btn_ins || source == jmi_ins){
            insertActionPerformed();
            bd.set("입력",true);
        }
        else if(source == btn_upd || source == jmi_upd){
            updateActionPerformed();
            bd.set("수정",true);
        }
        else if(source == btn_del || source == jmi_del){
            deleteActionPerformed();
        }
        else if(source == btn_det || source == jmi_det){
            detailActionPerformed();
        }
        else if(source == btn_all || source == jmi_all){
            System.out.println("전체 조회");
        }
        else if(source == jmi_exit || source == jmi_exit){

        }

    }
}
/*
메뉴바 추가하기
툴바 추가하기
같은 메뉴를 메뉴바와 툴바에 모두 추가하여서 메소드 재사용성 구현 실습
이벤트 처리를 담당하는 클래스로 설계하기 - ActionListener

삭제는 BookApp.java에서 처리한다
상세조회 , 수정 , 입력은 BookDialog.java 처리한다.
이 중에서 수정하기와 상세조희는 오라클 서버를 경유해야 한다.
왜나면 기존에 있는 정보를 수정하거나 상세조회하는 것이므로 조회결과를
화면에 출력해야 한다.

입력은 오라클 서버를 경유하지 않고 BookDialog화면에서 새로 입력받은
정보를 오라클 서버에 입력하는 것이다. (INSERT문)
BookDialog.java와 BookDao.java사이에서 처리가 진행된다.
BookDialog.java에서 BookDao의 메소드를 호출할 때 사용자가 입력한 값을
파라미터로 넘겨야하는데 컬럼의 갯수만큼 넘긴느 것보다는 BookVO주소번지를
하나 넘겨서 그 안에 선언된 멤버변수 값을 insert문에 넣는 것이 더 나은 방법이다.
BookDialog에서는 BookDao의 인스턴스화를 해야한다.
BookDialog에서 BookDao의 메소드를 호출한다.

 */

결과

  • 메인 창

  • 상단 메뉴바 File과 Edit

profile
BackEnd&Data Scientist가 되고 싶은 개발 기록 노트

0개의 댓글