2013-10-02 2 views
0

JTable에 AbstractTableModel을 사용합니다. 응용 프로그램이 일부 중요하지 클래스에서 일부 코드를 실행하여 실행되는 동안특정 JTable 셀의 데이터 변경

public class MyTableModel extends AbstractTableModel { 

    private List<String> columnNames = new ArrayList<String>(); 
    private List<List> data = new ArrayList(); 

    MyTableModel() { 
      columnNames.add("Action"); 
      columnNames.add("Count"); 
      columnNames.add("Total"); 
      columnNames.add("X"); 
      columnNames.add("Y"); 
      columnNames.add("Quarter"); 
      columnNames.add("Answer"); 
      columnNames.add("T (ms)"); 
    } 

    public void addRow(List rowData) { 
      data.add(rowData); 
      fireTableRowsInserted(data.size() - 1, data.size() - 1); 
    } 

    public void insertRow(int index, List rowData) { 
      data.add(0, rowData); 
      fireTableRowsInserted(data.size() - 1, data.size() - 1); 
    } 

    public int getColumnCount() { 
      return columnNames.size(); 
    } 

    public int getRowCount() { 
      return data.size(); 
    } 

    public String getColumnName(int col) { 
      try { 
       return columnNames.get(col); 
      } catch (Exception e) { 
       return null; 
      } 
    } 

    public Object getValueAt(int row, int col) { 
      return data.get(row).get(col); 
    } 


    public boolean isCellEditable(int row, int col) { 
      return false; 
    } 

    public Class getColumnClass(int c) { 
      return getValueAt(0, c).getClass(); 
    }  
} 

나는 새 행 (성공) 여기에 추가 할 수 있습니다. 이 모양입니다.

MyClass.MyTableModel.insertRow(0, (Arrays.asList(String.valueOf(valueOne), String.valueOf(valueTwo), String.valueOf(valueThree), 
        String.valueOf(valueFour), String.valueOf(valueFive), String.valueOf(valueSix), String.valueOf(valueSeven), 
        String.valueOf(valueEight), String.valueOf(valueNine)))); 
MyClass.myTable.setModel(MyClass.MyTableModel); 
MyClass.myTable.repaint(); 

그러나 추가 된 행의 특정 셀에는 데이터를 변경할 수 없습니다. 나는 setValueAt() 메소드를 다루려고했지만 성공하지는 못했다. 또한 단순히 예를 들어 MyClass.MyTableModel위한 방법의 setValueAt()를 호출하려고 : 또한 작동하지 않습니다

MyClass.MyTableModel.setValueAt("valueChange", 0, 6); 
MyClass.myTable.setModel(MyTableModel); 
MyClass.myTable.repaint(); 

. 내 모델에 fireTableCellUpdated()를 호출하려고 시도했지만 (잘못된 연습이라는 것을 알고있다.) 시도도 실패했다. 아이디어가 있습니까?

+0

더 나은 도움을 받으려면 [SSCCE] (http://sscce.org/)를 게시하십시오. –

+0

가독성을 높이려면 변수 이름에 올바른 대문자를 사용하십시오. 변수는'MyClass'와 그 필드 인'MyClass.MyTable'와는 달리 작은 글씨로 시작해야합니다. "작동하지 않는다"는 것은 매우 유용한 오류 설명이 아닙니다. –

+0

@AndrewThompson, 기억합니다, 감사합니다. Mr. his, 어떻게하면 데이터 업데이트가 작동하지 않고 그 이유를 알 수없는 상황을 더 잘 설명 할 수 있습니까? 내가 왜 그 질문이 없을지를 안다면. – bluevoxel

답변

2

setValueAt 메서드를 재정의하지 마십시오. 기본적으로이 메서드는 아무 것도 수행하지 않습니다. 예를 들어

...

public void setValueAt(Object value, int row, int column) { 
    List rowValues = date.get(row); 
    rowValues.set(column, value); 
    fireTableCellUpdated(row, col); 
} 

이 모든 열을 편집 할 수 있다고 가정합니다. 일반적으로 들어오는 값을 검사하여 해당 열의 올바른 유형인지 확인한 다음 유효성 검사를 수행해야 할 필요가있는 사항을 적용합니다. 그러나 그 내용은 사용자에게 맡깁니다.

How to use tables 몇 가지 예 :

+0

전체 행 데이터를 목록에서 가져 오려고하지 않았습니다 ... 솔루션이 완벽하게 작동합니다. 대단히 감사합니다! – bluevoxel

+0

@eLogic 오늘 근무한 것을보기 좋게;) – MadProgrammer