2012-07-20 67 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