자바 초보 스윙 GUI JTABLE 관련 질문 드립니다!
조회수 2866회
간단하게 연습하려고 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 상에는 전혀 변동 사항이 없습니다. 혹시나 배열에 입력이 안 돼있는지 확인할 겸 해서
콘솔 출력 창을 통해 배열을 확인하였으나 입력값이 담겨 있었습니다. 무엇이 문제인지 도통 모르겠습니다.
댓글 입력