편집 기록

편집 기록
  • 프로필 편집요청빌런님의 편집
    날짜2017.06.21

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


    간단하게 연습하려고 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 상에는 전혀 변동 사항이 없습니다. 혹시나 배열에 입력이 안 돼있는지 확인할 겸 해서

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

  • 프로필 HOANY님의 편집
    날짜2017.06.21

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


    간단하게 연습하려고 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 상에는 전혀 변동 사항이 없습니다. 혹시나 배열에 입력이 안 돼있는지 확인할 겸 해서

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