자바 초보 스윙 GUI JTABLE 관련 질문 드립니다!

조회수 2861회

간단하게 연습하려고 GUI를 구현해보았습니다.

텍스트 필드의 입력값을 객체 클래스로 구현된 어레이 리스트에 넣고 그 어레이 리스트의 값을 data 배열에 복사하여 data 배열을 테이블에 출력하고 싶은데 데이터를 입력하여도 테이블에 출력이 안되고 있습니다.

제가 잘못한 부분이 있는지 알고 싶습니다. 감사합니다!

GUI 클래스

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JTable;

public class Test_Main extends JFrame {
    private JPanel contentPane;
    private JTable table;

    private JLabel label_1;
    private JLabel label;
    private JLabel label_2;
    private JLabel label_3;

    private JTextField textField_운항시간;
    private JTextField textField_직책;
    private JTextField textField_성명;
    private JTextField textField_기종;


    private Pilot_DB db = new Pilot_DB();
    private Pilot pilot = new Pilot();

    private DefaultTableModel model;
    private JScrollPane scrollPane;
    private Object[][] data;
    private String colnames[] = { "직책", "성명", "기종", "운항시간" };
    private Object[] data2 = new Object[4];

    /**
     * Launch the application.
     */

    public void pilotlist() {
    // 객체 가변배열의 값을 data배열에 복사
        int count = db.getCount();
        data = new Object[count][4];
        for (int i = 0; i < count; i++) {
            Pilot pdb = db.getpilot(i);
            data[i][0] = pdb.get직책();
            data[i][1] = pdb.get성명();
            data[i][2] = pdb.get기종();
            data[i][3] = pdb.get운항시간();     
        }

    }


    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Test_Main frame = new Test_Main();
                    frame.setVisible(true);
                    frame.setTitle("Flight");
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public Test_Main() {

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 781, 550);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        label_1 = new JLabel("\uC9C1\uCC45");
        label_1.setBounds(12, 11, 46, 15);
        contentPane.add(label_1);

        label = new JLabel("\uC131\uBA85");
        label.setBounds(154, 11, 46, 15);
        contentPane.add(label);

        label_2 = new JLabel("\uAE30\uC885");
        label_2.setBounds(296, 11, 46, 15);
        contentPane.add(label_2);

        label_3 = new JLabel("\uC6B4\uD56D\uC2DC\uAC04");
        label_3.setBounds(438, 10, 57, 15);
        contentPane.add(label_3);

        textField_직책 = new JTextField();
        textField_직책.setColumns(10);
        textField_직책.setBounds(40, 8, 102, 21);
        contentPane.add(textField_직책);

        textField_성명 = new JTextField();
        textField_성명.setColumns(10);
        textField_성명.setBounds(182, 8, 102, 21);
        contentPane.add(textField_성명);

        textField_기종 = new JTextField();
        textField_기종.setColumns(10);
        textField_기종.setBounds(324, 8, 102, 21);
        contentPane.add(textField_기종);

        textField_운항시간 = new JTextField();
        textField_운항시간.setColumns(10);
        textField_운항시간.setBounds(491, 7, 102, 21);
        contentPane.add(textField_운항시간);


        JButton btnNewButton = new JButton("\uCD94\uAC00");
        btnNewButton.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent arg0) {

                String p = textField_직책.getText();
                String n = textField_성명.getText();
                String a = textField_기종.getText();
                String t = textField_운항시간.getText();

                if (p.equals("") || n.equals("") || a.equals("") || t.equals("")) {
                    JOptionPane.showMessageDialog(getContentPane(), "입력하신 값중  Null값이 있습니다.");
                } else {
                    // 버튼 리스너로 텍스트필드의 값을 객체 클래스에, 객체를 가변배열 클래스로 전달
                    pilot.Pilot(p, n, a, t);
                    db.DBadd(pilot);
                    pilotlist();

                    JOptionPane.showMessageDialog(getContentPane(), "기록 추가 완료.");
                }
            }

        });

        btnNewButton.setBounds(641, 6, 97, 23);
        contentPane.add(btnNewButton);
        model = new DefaultTableModel(data, colnames);      
        table = new JTable(model);
        table.setFillsViewportHeight(true);
        scrollPane = new JScrollPane(table);
        scrollPane.setBounds(12, 38, 741, 451);
        scrollPane.setViewportView(table);
        contentPane.add(scrollPane);
    }
}

객체 클래스

public class Pilot {
    private String 직책;
    private String 성명;
    private String 기종;
    private String 운항시간;

    public void Pilot(String p, String n, String a,String t) {
        직책 = p;
        성명 = n;
        기종 = a;
        운항시간 = t;

    }

    public void set직책(String p){
        직책 = p;

    }

    public void set성명(String n){
        성명 = n;

    }

    public void set기종(String a){
        기종 = a;

    }

    public void set운항시간(String t){
        운항시간 = t;
    }


    public String get직책(){
        return 직책;
    }

    public String get성명(){
        return 성명;
    }

    public String get기종(){
        return 기종;
    }

    public String get운항시간(){
        return 운항시간;
    }

}

가변배열 저장 클래스

import java.util.ArrayList;

public class Pilot_DB {

    private ArrayList<Pilot> list = new ArrayList<Pilot>();
    //가변 배열 선언

    public void DBadd(Pilot pilot){
        list.add(pilot);
    가변배열에 객체를 입력 받는다
    }

    public int getCount(){
        return list.size();
    //배열의 크기를 리턴

    }

    public Pilot getpilot(int i){
        return list.get(i);
    //배열의 값을 리턴
    }

}

이미지

텍스트 필드의 입력값을 입력하고 버튼 리스너를 통해 코드를 실행 하여도

이미지

JTable 상에는 전혀 변동 사항이 없습니다. 혹시나 배열에 입력이 안 돼있는지 확인할 겸 해서

콘솔 출력 창을 통해 배열을 확인하였으나 입력값이 담겨 있었습니다. 무엇이 문제인지 도통 모르겠습니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)