package JTableMake;


import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;


import javax.swing.JButton;

import javax.swing.JComboBox;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.JScrollPane;

import javax.swing.JTable;

import javax.swing.JTextField;

import javax.swing.table.DefaultTableModel;

import javax.swing.table.TableModel;


public class DataWindowTable extends JFrame {

private static final long serialVersionUID = 1L;


// 기본설정은 항상 생성자에서

public DataWindowTable() {


// 테이블에 출력할 데이터 만들기

// 컬럼이름

String[] columns = { "학생", "장래희망", "나이" };


// 데이터 만들기

String[][] datas = { { "김영진", "DJ", "27" }, { "김민호", "경호원", "28" }, { "김기남", "바텐터", "28" },

{ "모인재", "바리스타", "28" }


};


// 데이터를 테이블에 출력하기 위해서 TableModel로 변경


TableModel model = new DefaultTableModel(datas, columns);


// 위의 데이터를 가지고 테이블을 생성

JTable table = new JTable(model);


// Scrollpane을 생성해서 JTable을 배치하고 중앙에 배치

// 컬럼이 나오지 않는다 이걸 출력하기 위해서

JScrollPane sc = new JScrollPane(table);


add("Center", sc);


JPanel p = new JPanel();

JLabel l = new JLabel("이름");

p.add(l);


JTextField Field = new JTextField(5);


p.add(Field);


JLabel category = new JLabel("분야");

p.add(category);

JComboBox<String> cbdream = new JComboBox<String>();


cbdream.addItem("경호원");

cbdream.addItem("경찰");

cbdream.addItem("의사");

cbdream.addItem("비행사");

p.add(cbdream);


JLabel age = new JLabel("나이");

p.add(age);


JTextField ageput = new JTextField(3);

p.add(ageput);


JButton btn = new JButton("삽입");

p.add(btn);

JButton btn1 = new JButton("삭제");

p.add(btn1);

add("North", p);


setTitle("표만들기");

setBounds(700, 300, 500, 500);

setVisible(true);

setDefaultCloseOperation(EXIT_ON_CLOSE);


// 버튼을 눌렀을 때는 ActionEvent 발생


ActionListener listener = new ActionListener() {


@Override

public void actionPerformed(ActionEvent e) {


// 이벤트 라우팅


switch (e.getActionCommand()) {


case "삽입":

// 입력하거나 선택한 데이터 가져오기


String name = Field.getText();

String age1 = ageput.getText();

String category1 = cbdream.getSelectedItem().toString();

System.out.println(name);

System.out.println(age1);

System.out.println(category1);


// 오류 메세지

if (name.trim().length() < 1) {

JOptionPane.showMessageDialog(null, "이름은 필수 입력", "입력오류", JOptionPane.ERROR_MESSAGE);

// 중간에 빠져나가고 싶으면 리턴을하면됩니다.

return;

}

 

if (age1.trim().length() < 1) {

JOptionPane.showMessageDialog(null, "나이를입력 필수", "입력오류", JOptionPane.ERROR_MESSAGE);

// 중간에 빠져나가고 싶으면 리턴을하면됩니다.

return;

}

// age는 숫자로만 구성되어야합니다.

int i = 0;

while (i < age1.length()) {


char ch = age1.charAt(i);

if (ch < '0' || ch > '9') {

JOptionPane.showMessageDialog(null, "나이는 숫자로만 입력", "입력오류", JOptionPane.ERROR_MESSAGE);

return;

}


i = i + 1;

}


// 데이터 삽입작업

String[] row = { name, category1, age1 };


// 테이블의 모델을 꺼내기

// 형변환한 이유

// JTable의 Model은 DefaultTableModel 클래스 타입인데

// getModel로 리턴받게 되면 TableModel로 리턴되서

// 원래의 자료형으로 형변환해서 사용합니다.

// 테이블에 삽입이 아닌 테이블의 모델이 삽입한 것 

DefaultTableModel m = (DefaultTableModel) table.getModel();

m.addRow(row);

JOptionPane.showMessageDialog(null, "삽입에 성공", "데이터 삽입",JOptionPane.INFORMATION_MESSAGE);

Field.setText("");

age.setText("");

cbdream.setSelectedIndex(0);

break;

case "삭제":

int rownum = table.getSelectedRow();

//선택이 안된경우는 음수값

if(rownum<0) {

JOptionPane.showMessageDialog(null, "삭제할 행을 선택하세요", "데이터 삭제",JOptionPane.INFORMATION_MESSAGE);

return;

}

// Confirm 대화상자 출력 

int r =  JOptionPane.showConfirmDialog(null, "정말로삭제? ","데이터삭제",JOptionPane.YES_NO_CANCEL_OPTION);

if(r==0) {

DefaultTableModel m1 = (DefaultTableModel)table.getModel();

m1.removeRow(rownum);

JOptionPane.showMessageDialog(null, "삭제완료","삭제",JOptionPane.INFORMATION_MESSAGE);

}


break;

}


}


};

btn.addActionListener(listener);

btn1.addActionListener(listener);

}


}



'Java > 자바 공부' 카테고리의 다른 글

Java의 접근 지정자  (0) 2018.04.04
클래스와 인스턴스와 생성자 정의  (0) 2018.02.12
main  (0) 2018.01.29
dao  (0) 2018.01.29
view  (0) 2018.01.29

+ Recent posts