2012-07-20 91 views
1

有沒有辦法讀取JScrollPane的內容?閱讀JScrollPane的內容

我執行的是一個DefaultTableModel其中有three columns,它們是使用addColumn()方法添加的。我使用這個DefaultTableModel作爲聲明和實現JTable的參數。此JTable稍後將用作JScrollPane的聲明和實現的參數。在整個代碼執行過程中,我使用addRow()方法將n33添加到DefaultTableModel。我的目標是讀取已添加行的內容。

有沒有人有任何建議?所有將不勝感激!

JTabbedPane tabbedPane = new JTabbedPane(); 
DefaultTableModel model = new DefaultTableModel(); 

model.addColumn("Column1"); 
model.addColumn("Column2"); 
model.addColumn("Column3"); 

JTable testResults = new JTable(model) { 
    @Override 
    public boolean isCellEditable(int row, int column) { 
     return false; 
    } 
}; 

JScrollPane resultTab = new JScrollPane(testResults); 
resultTab.setName("Tab1"); 
resultTab.setVisible(true); 

Thread thread1 = new Thread() { 
    public void run() { 
     if(tabbedPane.getSelectedComponent().getName().compareTo("Tab1") == 0) { 
      model.addRow(new Object[]{"content1", "content2", "content3"}); 
      model.addRow(new Object[]{"content4", "content5", "content6"}); 
      ... 
      ... 
      ... 
      model.addRow(new Object[]{"this", "will", "continue"}); 
     } 
     else { 
      model.addRow(new Object[]{"content1", "content2", "content3"}); 
      model.addRow(new Object[]{"content4", "content5", "content6"}); 
     } 
    }; 
thread1.start(); 

欲讀取的數據「內容1」,「內容2」,「content3」,「content4」,「content5」,「content6」等。該橢圓表示有行的未定義數量的被添加到整個源代碼中。

+0

您應該簡單地遍歷[TableModel](http://docs.oracle.com/javase/6/docs/api/javax/swing/table/TableModel.html)。使用以下三個方法:1)第一個循環限制的getRowCount()2)嵌套循環限制的getColumnCount()3)getValuetAt(firstloopincrement,nestedloopincrement) – 2012-07-20 15:14:34

+0

[讀取JScrollPane的內容](http:// stackoverflow.com/questions/11581548/read-contents-of-a-jscrollpane) – 2012-07-20 15:15:44

+0

我已經給出了一個更早的嘗試。當getRowCount()方法返回0時,getColumnCount()方法正確返回3;我的理論是,它是0,因爲它是在for循環下的一個單獨的線程中動態添加行。 – David 2012-07-20 15:17:18

回答

3

您想要從DefaultTableModel中讀取數據,而不是JScrollPane - 它只是一個Swing容器。

getDataVector()會幫助你在這裏。它返回代表表格模型中數據的向量矢量。

+0

它似乎沒有工作。我添加了額外的代碼;也許有什麼我失蹤? – David 2012-07-20 15:49:30

0

羅賓提出了一個很好的觀點。您應該在EDT線程上添加行。如果你有一個正在讀取行的長時間運行的進程,那麼我建議使用SwingWorker來獲取這些行並將它們添加到你的TableModel中。你應該使用具體的實現(在你的情況下DefaultTableModel)來做到這一點。

1
table.getModel().getValueAt(0, 0); 

這將從表模型返回「contents1」。

table.getModel().getValueAt(0, 1); 

這將返回contents2。

查看更多詳情TabelModel