2010-12-30 7 views
1

이 클래스에는 PRIvariable (클래스 이름) 클래스 데이터가 들어있는 ArreayList가 있습니다. 아래 자바 코드의 일부분을 보여줍니다. 이제 Arraylist 데이터를 Jtable에 저장하려고합니다. 내가 어떻게 할 수 있지. 여기에 이미 모든 스윙 컴포넌트처럼 ar(arraylist)JTable에 arraylist 데이터를 추가합니다.

PRIvariable pri=new PRIvariable(); 
    while (reader.ready()) { 
      String line = reader.readLine(); 
      String[] values = line.split(","); 
      if(values[2].equals(pri.incDate)){ 
       if(values[4].equals("KI")){ 
      pri.dateText=values[2]+" "+values[4]; 
      pri.count=pri.count+1; 
      pri.sum = pri.sum+Integer.parseInt(values[7]); 
     } 
      } 
     } 
    System.out.println(pri.dateText+" "+pri.sum+" "+pri.count); 
    ar.add(pri); 

답변

3

pri.dateText , pri.sum , pri.count을 추가하는 JTable는, MVC 패턴에 의존 (여러 수준에서,하지만 그 대상이 아니다).

하나의 뷰 (JTable), 하나의 모델 (나중에 다시 사용하기로 함) 및 컨트롤러 (여기에는 각 컨트롤 종류마다 하나의 컨트롤러 인 이벤트 리스너 세트로 구현 됨)가 있습니다.

당신이 가진 배열은 좋은 모델 출발점이 될 수 있습니다. 그러나 Swing은 JTable에서 데이터를 삽입하는 훨씬 좋은 방법을 제공합니다. 사실, JTable은 모델로 TableModel의 구현을 사용합니다. 바라건대, 이미 구현이 있습니다 : DefaultTableModel.

그래서 여기 내가 당신에게 제안하는 것입니다 : DefaultTableModel을 만들고 행/열에 테이블에 표시 할 모든 데이터를 넣은 다음 JTable#setModel(TableModel)을 호출하여 데이터를 표시하도록하십시오.

분명히 DefaultTableModel과 원하는 작업 사이에 여러 가지 부적합한 기능이 있습니다. 이제는 독자적인 테이블 모델을 만들어야 할 때입니다. 그러나 그것은 또 다른 질문입니다.

게다가, Swing tutorial을 잊지 말고, 스윙 구성 요소를 다룰 때 대개 좋은 일입니다.

1

어디서나 ArrayList가있는 곳을 볼 수 없습니다.

먼저 PRIvariable 개체를 만듭니다. 그런 다음 파일에서 한 줄의 데이터를 읽으면 루핑을 계속합니다. 데이터의 각 줄마다 개별 토큰으로 분할 한 다음 토큰 데이터 중 일부를 PRI 변수에 추가합니다. 문제는 단 하나의 PRIVariable 객체 만 가지고 있다는 것입니다. 따라서 새로운 데이터 행을 읽을 때마다 PRIvariable 객체의 값을 변경합니다. 모든 루핑 후에이 단일 PRIvariable 객체를 ArrayList에 추가하지만 ArrayList에는 오직 하나의 객체 만 있습니다.

쉬운 솔루션은 데이터를 가져올 때 TableModel을 업데이트하는 것입니다. 다음과 같음 :

DefaultTableModel model = new DefaultTableModel(...); 
JTable table = new JTable(model); 
... 
... 

while (reader.ready()) 
{    
    String line = reader.readLine();    
    String[] values = line.split(","); 
    String[] row = new String[3]; 
    row[0] = values[?]; 
    row[1] = values[?]; 
    row[2] = values[?]; 
    model.addRow(row); 
} 
+0

ar.add (pri); - 내가 보는 배열 목록에 대한 유일한 참조. – I82Much

1

GlazedLists을 살펴보십시오. 그들은 당신의리스트로부터 적당한 TableModel 객체를 생성하는 것을 매우 쉽게 만듭니다.

ArrayList< PRIvariable> myList = new ArrayList<PRIvariable>(); 
... fill up the list ... 
// This assumes your object has a getName() and getAge() methods 
String[] propertyNames = {"name","age"}; 
String[] columnLabels = {"Name","Age"}; 
// Are these columns editable? 
boolean[] writeable = {false, false}; 

EventList<PRIvariable> eventList = GlazedLists.eventList(myList); 
EventTableModel<PRIvariable> tableModel = new EventTableModel<PRIvariable>(eventList,propertyNames,columnLabels,writable); 
JTable table = new JTable(tableModel); 
관련 문제