Web develop/JAVA

[JAVA] 자바 Swing JTable, DefaultTableModel

ForA 2019. 4. 30. 18:16
728x90

JTable 생성

public class JTableTest extends JFrame{

  JTable table;
  JScrollPane sc;

  public JTableTest() {

      //테이블 데이터
      //Object배열은 모든 데이터를 넣을 수 있음
      Object[] columnTitle = {"이름","나이","직업"};
      Object[][] rowNames = { 
          //    0열  1열  2열 
            {"홍길동",13,"학생"},
            {"길라임",15,"학생"},
            {"김주원",17,"학생"}
          };

      //초기화, 설정
      table = new JTable(rowNames,columnTitle) 
      sc = new JScrollPane(table);

      add(sc);

      setBounds(400,300,300,300);
      setVisible(true);
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }

  public static void main(String[] args) {
      new JTableTest();
  }
}

JTable 내용수정 불가 설정

table = new JTable(rowNames,columnTitle) { //수정불가 
        @Override
        public boolean isCellEditable(int row, int column) {
            return false;
        }
    };

JTable에서 데이터 얻어서 화면에 출력하기

Object nameValue = table.getValueAt(1,0);  
System.out.println("nameValue=" + nameValue);

특정데이터 변경

//table.setValueAt(Object aValue, int row, int columne); //aValue : 변경할 데이터
table.setValueAt("차라임",1,0)

모든사람의 이름을 콘솔에 출력하기

for(int i = 0; i<table.getRowCount(); i++){
    System.out.println(table.getValueAt(i,0);
}

DefaultTableModel 새로운 행 추가

DefaultTableModel 클래스 사용이유

:  JTable에서는 추가,삭제기능을 사용하지 못하지만 dtm 사용시 addRow(), removeRow() 사용 가능

//table.setValueAt("김유신",3,0) -> 에러. 존재하지 않는 행을 참조  
//DefaultTableModel(Object\[\]\[\] data, Object\[\] columnNames)  
DefaultTableModel dtm = new DefaultTableModel(rowData,columnTitle);  

Object[] newRow = {"김유신,13,"화랑"};
dtm.addRow(newRow);

Vector v = new Vector<>();  
v.add("강감찬");  
v.add(28);  
v.add("장군");  
dtm.addRow(v);

DefaultTableModel 행 삭제

dtm.removeRow(2); //김주원 행 삭제

DefaultTableModel 활용

public class MainView extends JFrame{

DefaultTableModel dtm;
public JTable table;
JScrollPane scroll_table;

    public MainView(){

    //---JTable----
    //배열사용
    Object[][] rowData = new Object[0][4];
    String[] columnTitle={"번호","이름","나이","직업"};

    dtm = new DefaultTableModel(rowData,columnTitle);
    
    table = new JTable(dtm);
    scroll_table = new JScrollPane(table);

    //추가
    add(croll_table)

    }
}