K-DigitalTraining 강의/1. Java
[5주차] 99. AWT+SWING, JTable 만들기(Vector배열을 이용하는 생성자를 이용한 방법-> 파일로부터 읽어와서 만들때 유용) + 만들어진JTable에서 데이타 접근
이대곤
2022. 6. 9. 12:38
table.txt
이름/국어/영어/수학
써니/33/44/55
윤아/66/77/22
수영/54/98/99
티파니/11/22/33
효연/99/88/77
예시코드
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
class Sub10 extends JFrame{
JTable table;
JScrollPane sPane;
Container contentPane;
Vector<String> columnName = null; // String을 원소로 갖는 갖는 리스트
Vector<Vector<String>> data = null; // String 여러개를 갖는 백터들을 원소로 갖는 리스트
int cnt = 1;
Sub10(String title){
super(title);
columnName = new Vector<String>();
data = new Vector<Vector<String>>();
getFile(); // 파일에서 한줄씩 읽어와 columnName과 data 객체를 완성시킴
compose(); // 위에서 만들어진 JTable을 생성하고 Scrollbar panel에 올리고, 작업 영역에 올리는 메소드
setSize(500,300);
//setResizable(false); // 크기변경을 할수 없게 고정크기로
setVisible(true);
}
private void compose() { // JTable을 생성하고 Scrollbar panel에 올리고, 작업 영역에 올리는 메소드
table = new JTable(data, columnName);
sPane = new JScrollPane(table);
contentPane = getContentPane();
contentPane.add(sPane, BorderLayout.CENTER);
JButton btn = new JButton("출력");
contentPane.add(btn, BorderLayout.SOUTH);
btn.addActionListener(new TablePrint(table));
}
public void getFile() {
File file = new File("C:\\Java_ldg\\12__AWT\\src\\table.txt");
FileReader fr;
try {
fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String line;
while((line = br.readLine()) != null) { // 1줄씩 읽어들임
tableMake(line);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private void tableMake(String line) {
// line: 이름/국어/영어/수학
// line: 써니/33/44/55
String[] tokens = line.split("/");
if (cnt++ == 1) { // 파일내용중 첫번째 줄은 column 명으로 사용
for(int i = 0; i < tokens.length; i++) {
columnName.add(tokens[i]);
}
}else {
Vector<String> one = new Vector<String>();
for(int i = 0; i < tokens.length; i++) {
one.add(tokens[i]);
}
data.add(one);
}
}
}
class TablePrint implements ActionListener {
JTable table;
TablePrint(JTable table) {
this.table = table;
}
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("버튼눌림");
int rowCount = table.getRowCount();
int columnCount = table.getColumnCount();
System.out.println("rowCount:" + rowCount + " columnCount:" + columnCount);
for (int i = 0; i < columnCount; i++) {
String colName = table.getColumnName(i);
System.out.print(colName + "\t");
}
System.out.println();
for (int i = 0; i < rowCount; i++) {
for(int j =0; j< columnCount; j++){
Object obj = table.getValueAt(i, j);
System.out.print(obj + "\t");
}
System.out.println();
}
}
}
public class Ex12_10_JTable {
public static void main(String[] args) {
new Sub10("JTable");
}
}