[Java] JTable응용

AddAction.java
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.table.*;
public class addAction implements ActionListener{
//준비
JTable table;
JTextField txt1,txt2,txt3;
//생성자 구현
public addAction(JTable table,
JTextField txt1,
JTextField txt2,
JTextField txt3){
this.table = table;
this.txt1 = txt1;
this.txt2 = txt2;
this.txt3 = txt3;
}
@Override
public void actionPerformed(ActionEvent e) {
String arr[] = new String[3];
arr[0]=txt1.getText();
arr[1]=txt2.getText();
arr[2]=txt3.getText();
DefaultTableModel model =
(DefaultTableModel)table.getModel();
//getModel()메소드는 미리앞에 있는 모델을 얻어오는 메소드
model.addRow(arr);
//추가 =>이력후 값을 초기 null을 넣어 추가버튼을 누르면 입력했던데이타가 지워짐
txt1.setText(null);
txt2.setText(null);
txt3.setText(null);
//null처리후 이름의 JTextField에 포커스를 마추기(이름 필드에 커서 주기)
txt1.requestFocus();//이메소드를 이용하면 그곳에 포커스가 맞춰짐
}
}


JTableCreate.java
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.table.*;
public class JTableCreate {
public static void main(String[]args) {
JFrame frame = new JFrame("Table Test");
frame.setPreferredSize(new Dimension(500,400));
frame.setLocation(500,400);
Container con = frame.getContentPane();
String colName[] = {"이름","나이","성별"};
//1단계:DefaultTableModel 객체 생성
DefaultTableModel model = new DefaultTableModel(colName,0);
//2단계: JTable 객체 생성
JTable table = new JTable(model);
//cell의 데이터값 가운데 설정하기====================================
DefaultTableCellRenderer tableCell = new DefaultTableCellRenderer();
tableCell.setHorizontalAlignment(SwingConstants.CENTER);
TableColumnModel CellModel =
table.getColumnModel();
for(int i = 0;i<CellModel.getColumnCount();i++)
CellModel.getColumn(i).setCellRenderer(tableCell);
//=================================================================
//3단계:scrollPane객체 생성
con.add(new JScrollPane(table),BorderLayout.CENTER);
JPanel panel = new JPanel();
JTextField txt1 = new JTextField(6);
JTextField txt2 = new JTextField(3);
JTextField txt3 = new JTextField(2);
JButton btn1 = new JButton("추가");
JButton btn2 = new JButton("삭제");
panel.add(new JLabel("이름"));//바로만들기
panel.add(txt1);
panel.add(new JLabel("나이"));//바로만들기
panel.add(txt2);
panel.add(new JLabel("성별"));//바로만들기
panel.add(txt3);
panel.add(btn1);
panel.add(btn2);
con.add(panel, BorderLayout.SOUTH);
//각 컬럼별 데이타 정열시키기-----------------------------------
table.setAutoCreateRowSorter(true);
TableRowSorter tavles = new TableRowSorter(table.getModel());
table.setRowSorter(tavles);
//-----------------------------------------------------------
btn1.addActionListener(new addAction(table,txt1,txt2,txt3));
btn2.addActionListener(new removeAction(table));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}

removeAction.java
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.table.*;
public class removeAction implements ActionListener {
//준비
JTable table;
//생성자 구현
public removeAction(JTable table){
this.table = table;
}
@Override
public void actionPerformed(ActionEvent e) {
//선택했을때만삭제를 위해 밑에 작업을 해준다. 이작업을 수행하지않으면 선택하지않고
//삭제를 눌러도 삭제됨
int rownumber = table.getSelectedRow();
if(rownumber == -1)
return;
DefaultTableModel model =
(DefaultTableModel)table.getModel();
model.removeRow(rownumber);
}
}