ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java Swing]SWing에서 jTable 사용하기
    JAVA/java Swing 2022. 5. 13. 17:18
    728x90

    윈도우빌더를 사용할 경우 아래와 같은 순서에 따라 jTable을 등록시켜준다.

     

    ▼ 작업할 패키지에서 'Ctrl+N'입력후 'jFrame'로 검색한다

     

     

    ▼ 작업할 class파일의 이름을 등록한다.

     

     

     

     

    ▼ 왼쪽 아래 'Package Explorer'에 클래스파일이 생성되고, 우측에 'Source'탭에 코드가 보인다. 이때 'Design'탭을 확인한다.

     

     

     

     

    ▼ 'Design'탭을 클릭하면 우측에 창이 미리 만들어져서 보인다.

     

     

     

     

    ▼ 중앙의 'Containers'탭에서 'jPanel'아이콘을 선택후 우측 위도우창에 드래그해서 프래임의 크기에 맞게 그린후, 패널의 이름을 'pnTop'로 설정하였다.

     

     

     

     

    ▼ 다시 중앙의 'Layouts'탭에서 'Absolute layout'아이콘을 선택후 우측 윈도우창을 클릭해 준다.

     

     

     

     

     

    ▼ 아래쪽 윈도우에도 하나더 패널을 추가했다. 이름은 'pnCenter'로 설정했다.

     

     

     

     

    ▼ 아래쪽 윈도우에 중앙의 'Absolute layout'를 선택하여 우측 윈도우 pnCenter패널의 상단을 클릭해 준다.

     

     

     

     

    ▼ 다시 'JScrollPane'아이콘을 클릭해서 우측의 pnCenter패널안에 드래그해서 크기를 똑같이 맞춰서 그려준다.

     

     

     

     

    ▼ 다시 'Components'탭의 'JTable'아이콘을 클릭한후 pnCenter패널의 상단을 클릭해준다.->(수정: 상단을 찍지말고, 우측 하단의 content(내용)영역을 크릭한다.

     

     

     

     

    ▼ 앞의 작업을 하면 JTable가 한줄로 들어간 것을 볼 수 있다.

     

     

     

     

    /* 다음은 Source탭으로 이동해서 아래와 같은 순서에 따라서 코드를 입력시켜준다.(아래쪽의 조회 코드 참조) */

    package design;
     
    import java.awt.Font;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.Vector;
    import java.util.regex.Pattern;
     
    import javax.swing.DefaultComboBoxModel;
    import javax.swing.JButton;
    import javax.swing.JComboBox;
    import javax.swing.JFrame;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.JTextField;
    import javax.swing.border.EmptyBorder;
    import javax.swing.table.DefaultTableModel;
     
    public class HoewonTest extends JFrame {
     
        private JPanel contentPane;
        private JTextField txtSearch;
        private JTable tblContent;
        private JComboBox comboSearch;
        
        // jTable을 디자인탭에 올리는 순서?
        // 1. 먼저 'Panel'을 하나 만든후, 'Absolute Layout'을 패널에 찍어준후,
        // 2. 'jScrollPane'을 패널크기에 맞도록 그려준다.
        // 3. 'jTable'을 'jScrollPane'상단에 클릭해 준다.
        
        // 데이터베이스 연결을 위한 DefaultTableModel 객체준비 : Vector형식의 자료를 table로 표시한다.
        // 테이블에 DB자료를 넣는 순서?(모든 준비된 객체들은 생성과 동시에 넣어준다)
        // 1:헤드타이틀과 데이터를 준비한다.  2:준비된 데이터를 DefaultTableModel에 넣는다.
        // 3: DefaultTableModel을 '테이블(jTable)'에 넣는다.  4: 테이블을 'JScrollPane'에 넣는다. 5: 'JScrollPane'을 프레임에 올린다.
        private DefaultTableModel defaultTableModel;
        private Vector headings, vData;
        
        HoewonDAO dao = new HoewonDAO();
     
        public static void main(String[] args) {
            HoewonTest frame = new HoewonTest();
        }
     
        public HoewonTest() {
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setBounds(100, 100, 640, 480);
            setLocationRelativeTo(null);
            contentPane = new JPanel();
            contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
            setContentPane(contentPane);
            contentPane.setLayout(null);
            
            JPanel pnTop = new JPanel();
            pnTop.setBounds(0, 0, 624, 62);
            contentPane.add(pnTop);
            pnTop.setLayout(null);
            
            comboSearch = new JComboBox();
            comboSearch.setFont(new Font("굴림", Font.BOLD, 16));
            comboSearch.setModel(new DefaultComboBoxModel(new String[] {"성명", "나이", "주소"}));
            comboSearch.setBounds(12, 10, 109, 42);
            pnTop.add(comboSearch);
            
            txtSearch = new JTextField();
            txtSearch.setFont(new Font("굴림", Font.BOLD, 16));
            txtSearch.setBounds(133, 17, 140, 30);
            pnTop.add(txtSearch);
            txtSearch.setColumns(10);
            
            JButton btnSearch = new JButton("조건검색");
            
            btnSearch.setFont(new Font("굴림", Font.BOLD, 16));
            btnSearch.setBounds(285, 10, 105, 42);
            pnTop.add(btnSearch);
            
            JButton btnList = new JButton("전체검색");
            
            btnList.setFont(new Font("굴림", Font.BOLD, 16));
            btnList.setBounds(402, 10, 109, 42);
            pnTop.add(btnList);
            
            JButton btnExit = new JButton("종 료");
            
            btnExit.setFont(new Font("굴림", Font.BOLD, 16));
            btnExit.setBounds(521, 10, 91, 42);
            pnTop.add(btnExit);
            
            JPanel pnContent = new JPanel();
            pnContent.setBounds(0, 64, 624, 377);
            contentPane.add(pnContent);
            pnContent.setLayout(null);
            
            
            
            // 헤드타이틀 준비(Vector형식으로)
            headings = new Vector();
            headings.add("번호");
            headings.add("성명");
            headings.add("나이");
            headings.add("주소");
            
            // 데이터 준비(Vector형식으로) - 전체자료 검색
            vData = dao.getList();
            
            // 테이블 모델에 준비된 헤드타이틀과 데이터를 담는다.
            defaultTableModel = new DefaultTableModel(vData, headings);  // (데이터자료, 헤드타이틀)
            
            // defaultTableModel을 테이블에 올린다.
            tblContent = new JTable(defaultTableModel);
            
            // 테이블을 JScrollPane 올려준다.
            JScrollPane sp = new JScrollPane(tblContent);
            //sp.setColumnHeaderView(tblContent);
            sp.setBounds(0, 10, 624, 367);
            
            // JScrollPane 프레임에 올려준다.
            pnContent.add(sp);
            
            setVisible(true);
            
            /* -------------------------------------------- */
            
            // 조건검색
            btnSearch.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    String comboStr = (String) comboSearch.getSelectedItem();
                    String txtStr = txtSearch.getText();
                    
                    if(txtStr.equals("")) {
                        JOptionPane.showMessageDialog(null, "입력상자에 검색할 내용을 입력하세요");
                        txtSearch.requestFocus();
                        return;
                    }
                    
                    if(comboStr.equals("성명")) {
                        vData = dao.getSearch("name", txtStr);
                    }
                    else if(comboStr.equals("나이")) {
                        if (!Pattern.matches("^[0-9]*$", txtStr)) {
                            JOptionPane.showMessageDialog(null, "나이는 숫자로 입력하세요.");
                            txtSearch.requestFocus();
                            return;
                        }
                        else {
                            vData = dao.getSearch("age", txtStr);
                        }
                    }
                    else if(comboStr.equals("주소")) {
                        vData = dao.getSearch("address", txtStr);
                    }
                    
                    if(vData.size() == 0) {
                        JOptionPane.showMessageDialog(null, "검색된 자료가 없습니다.");
                    }
                    else {
                        defaultTableModel.setDataVector(vData, headings);
                    }
                }
            });
            
            // 전체검색
            btnList.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    vData = dao.getList();
                    //System.out.println("전체검색 : " + vData);
                    defaultTableModel.setDataVector(vData, headings);
                }
            });
            
            // 종료메소드
            btnExit.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    //System.exit(0); 
                    dispose();
                }
            });
        }
    }

     

    ▼ 실행결과는 아래와 같다.

     

     

     

    728x90

    댓글

Designed by Tistory.