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");
	}
}