2013-05-14 3 views
1

I 코드에서 다음 JTable가 있습니다JTable의 데이터를 다시로드

String[] columnNames = {"Name", "Category", "Seller", "Sell Price", "Current Bid", "End Date", "Open"}; 
Object[][] data = GetAuctionTableData(); 
final JTable AuctionTable = new JTable(data, columnNames); 

나는 또한 양식에 버튼이 있고 버튼 클릭에 테이블에 데이터를 다시로드하고자합니다. 어떻게해야합니까? AbstractTableModel을 사용해야합니까? JTable가이 마지막으로 선언으로

RefreshAuctionButton.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) 
    { 
     Object[][] data = GetAuctionTableData(); 
     AuctionTable = new JTable(data, columnNames); 
    }}); 

이 코드가 작동하지 않습니다

편집 여기

버튼에 대한 코드입니다. 나는 내부 클래스 (위와 같은 버튼)에서 액세스하기 때문에 현재 최종본으로 사용하고 있습니다.

+0

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

+0

일반적인 Java 사례 규칙을 사용하십시오. – trashgod

답변

0

DefaultTableModel을 사용하고 addRow (Object [] rowData)를 사용하여 데이터를 설정하십시오. model.fireTableDataChanged(); 데이터 변경 사항을 알릴 수 있습니다.

+0

'DefaultTableModel'은 올바른 이벤트를 암시 적으로 발생시킵니다. 명시 적으로 그렇게해서는 안됩니다. – trashgod

1

버튼에 대해 테이블에 대해 변경하려는 사항에 따라 다릅니다. 버튼을 그냥 data 내에서 객체의 업데이트를 트리거 경우

  • , 는 만 (같은 또는 무언가) AuctionTable.update를 사용해야합니다.

  • 삽입을 트리거하는 경우 행을 직접 추가하여 AuctionTable에 직접 삽입하는 것이 유용합니다. ((DefaultTableModel) AuctionTable.getModel).addRow(...);

  • 삭제를 트리거하는 경우 행의 색인 만 삭제하면됩니다. 나는 버튼의 동작에 대한 자세한 정보가 필요합니다, 또는 당신이 GetAuctionTableData()에 버튼에서 바람직하지 않을 수도 전체의 JTable의 정보 (뭔가를 다시로드를 누를 때마다 전화를 걸 수 있습니다, 그렇지 않으면 ((DefaultTableModel) AuctionTable.getModel).removeRow(...);

사용 모든).

편집

AuctionTablefinal 수정을 유지하면서 전체 내용을 다시로드하려면 버튼의 액션 청취자에 다시 설정 테이블 대신 setDataVector 방법을 사용합니다.

RefreshAuctionButton.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) 
    { 
     Object[][] data = GetAuctionTableData(); 
     ((DefaultTableModel) AuctionTable.getModel()).setDataVector(data, columnNames); 
    } 
}); 

당신은하지만,뿐만 아니라 당신의 columnNamesfinal에 설정해야합니다.

+0

JTable의 전체 정보를 다시로드하고 싶습니다. JTable이 최종적인 경우이 작업을 수행 할 수 있습니까? – user2351151

+0

예, 가능합니다. 'final' 키워드는 다른 객체를 변수'AuctionTable'에 할당하는 것을 막습니다. 이것은 현재 코드에서 작동하지 않습니다. 'DefaultTableModel'의'setDataVector' 메소드를 사용하십시오. 내 대답을 코드로 업데이트합니다. –

+0

다음과 같은 오류가 발생합니다. javax.swing.JTable $ 1을 (를) javax.swing.table로 캐스팅 할 수 없습니다.DefaultTableModel DefaultTableModel 형의 JTable을 작성해야한다고 말하는 것이 맞습니까? – user2351151