본문 바로가기

미래(2015-2016)/자습

JTable, DefaultTableModel

- Swing에서 추가된 컴포넌트 중 하나. 사용할 때에는 Frame에 바로 넣지 않고 Container에 먼저 넣어야 한다.

- JTable.setRowSorter(RowSorter sorter) : JTable의 정렬을 설정한다.

- RowSorter(TableModel model): 정렬 시 사용하는 클래스

ex) RowSorter rs = new RowSorter(new DefaultTableModel());

    JTable.setRowSorter(rs);

- JTable.convertRowIndexToModel(int viewRowIndex) : 정렬 순서가 아닌 실제 데이터 순의 인덱스 번호 반환

- DefaultTableModel이라는 모델에 Vector 형태로 자료를 담고, 그 모델을 테이블에 추가하여 테이블에 자료를 넣는 형식



import javax.swing.*;
import javax.swing.table.*;

import java.awt.*;
import java.awt.event.*;
import java.util.*;

public class UseJTable extends JFrame
{
    DefaultTableModel dtm;
    Vector<String> list;
    JTable table;
    Vector<String> colName;
    
    UseJTable()
    {
        super("JTable Test");
        setBounds(300, 300, 300, 300);
        
        colName = new Vector<String>();
        
        colName.add("이름");
        colName.add("시");
        colName.add("구");
        colName.add("동");
        
        // 익명중첩 클래스로 테이블 편집 여부를 설정한다.
        dtm = new DefaultTableModel(colName ,0){        // DefaultTableModel(Vector ColumnNames, int rowCount)

            @Override
            public boolean isCellEditable(int row, int column)      // 테이블의 편집 가능 여부를 알려주는 메소드
            {
                return false;       // 편집이 안되도록 한다.
            }
        };
        
        list = new Vector<String>();
        list.add("홍길동");
        list.add("서울시");
        list.add("강동구");
        list.add("천호동");
        dtm.addRow(list);
        
        // addRow() 메소드는 첫 인덱스부터 columNames의 개수만큼만 추가되기 때문에 Vector를 초기화
        list = new Vector<String>();
        list.add("강길동");
        list.add("서울시");
        list.add("강남구");
        list.add("대치동");
        dtm.addRow(list);
        
        list = new Vector<String>();
        list.add("박길동");
        list.add("서울시");
        list.add("광진구");
        list.add("화양동");
        dtm.addRow(list);
        
        table = new JTable(dtm);
        table.getTableHeader().setReorderingAllowed(false);     // JTable의 헤더를 고정시킨다. (true는 고정해제)
        add(new JScrollPane(table));        // table을 담은 JScollPane을 JFrame에 부착 
        setVisible(true);                       // table을 단순히 JFrame에 부착시 헤더가 나오지 않는다
    }
        
    public static void main(String[] args)
    {
        new UseJTable();
    }

}



'미래(2015-2016) > 자습' 카테고리의 다른 글

룩앤필 사용하기  (0) 2015.11.03
JToolBar  (0) 2015.11.02
DefaultListModel  (0) 2015.11.02
GridBagLayout  (0) 2015.10.29
계산기 외형만 구현하기  (0) 2015.10.27