2017-03-11 14 views
0

기본값이있는 JTable 4x4가 있습니다. 사용자는 JTable 크기를 변경할 수 있습니다. 예를 들어 크기를 변경 한 후 6x6이면 기본값이 지워지고 사용자가 자체 값을 입력 할 수 있습니다. 어떻게 그것들을 정수 테이블로 가져 가야합니까? 내 모델 클래스에서 getValueAt() 및 setValueAt()를 사용하려고했지만 JTable 필드는 다른 셀을 클릭 한 후에 항상 지워졌습니다.크기 재조정 가능한 JTable에서 값을 얻는 방법

class MyTableModel extends AbstractTableModel { 

int size; 
private String[] columnNames = { "Stan 1", "Stan 2", "Stan 3", "Stan 4" }; 

private Object[][] defaultValues = new Object[][] { 
     { "5", "15", "10", "0"}, 
     { "10", "10", "-20", "30"}, 
     { "40", "0", "50", "-30"}, 
     { "60", "0", "20", "-10"}}; 

private Object[][] newData = null; 

public MyTableModel(int x) { 
    size = x; 
} 

@Override 
public int getRowCount() { 
    return size; 
} 

@Override 
public int getColumnCount() { 
    return size; 
} 

@Override 
public String getColumnName(int columnIndex) { 
    if(columnIndex == 0) return null; 
    else return "Stan " + Integer.toString(columnIndex); 
} 

@Override 
public Class getColumnClass(int columnIndex) { 
    return Integer.class; 
} 

@Override 
public boolean isCellEditable(int rowIndex, int columnIndex) { 
    return true; 
} 

@Override 
public Object getValueAt(int rowIndex, int columnIndex) { 
    if(size == 4) 
     return defaultValues[rowIndex][columnIndex]; 
    else { 
     newData = new Object[size][size]; 
     return newData[rowIndex][columnIndex]; 
    } 
} 

@Override 
public void setValueAt(Object value, int rowIndex, int columnIndex) { 
    if(size == 4) 
     defaultValues[rowIndex][columnIndex] = value; 
    else 
     newData[rowIndex][columnIndex] = value; 

    fireTableCellUpdated(rowIndex, columnIndex); 
} 
} 
+0

코드를 직접 실행하고 테스트 할 수 있도록 유효한 [mcve]를 게시하십시오. 이 프로그램은 코드 형식의 텍스트로이 사이트에 게시하기에 충분히 작은 작은 프로그램이어야하며 컴파일해야하며 실행하여 문제를 표시해야합니다. –

답변

1

가 지정하는 TableModel 필요가 없거나 해 getValueAt (...)과의 setValueAt (...) 메소드를 오버라이드 (override) 할 수 있습니다.

DefaultTableModel의 데이터를 변경하려면 setDataVector(...) 방법을 사용할 수 있습니다.