【发布时间】:2017-02-25 00:21:23
【问题描述】:
我有一个显示来自 Vector 的信息的 JTable。现在我必须定期更新表的最后一列。为此,我采用了一个调度程序线程并在我的主程序的构造函数中实现了它。代码运行良好,但表格没有更新。它显示了我开始输入的数据。 请帮忙。
我的主程序:
public class JTableList extends JFrame
{
public static ObjectData objdata1;
static int i=0;
public JTableList()
{
VectorList.objectDataRetrive(); //vectorList is a class that first stores data into a vector of type ObjectData class.
//objectDataRetrive just stores data into vector that is in ObjectData class
final DefaultTableModel model = new DefaultTableModel();
model.setColumnIdentifiers(VectorList.coloumn_name); //adding column names
for(int i=0;i<VectorList.size;i++)//adding row names
{
objdata1 = VectorList.vect.get(i); //VectorList returns ObjectData class object in which the data is stored already.
model.insertRow(i, new Object[] { objdata1.id , objdata1.name,objdata1.acc_no,objdata1.exchange_name,objdata1.status });
}
ScheduledExecutorService execService = Executors.newScheduledThreadPool(5);
execService.scheduleAtFixedRate(()->{
//only frequently change last column "status"
while(i<VectorList.size) //loop until size of the vector.Here it is 5
{
objdata1 = VectorList.vect.get(i);
if(objdata1.status == "Verified"){
objdata1.status = "Done";
i++;
break;
}
if(objdata1.status == "NA"){
objdata1.status = "Waiting";
i++;
break;
}
if(objdata1.status == "Pending"){
objdata1.status = "Verified";
i++;
break;
}
if(objdata1.status == "Done"){
objdata1.status = "Verified";
i++;
break;
}
if(objdata1.status == "Waiting"){
objdata1.status = "NA";
i++;
break;
}
}
if(i==VectorList.size-1)
i=0;
}, 0, 3000L, TimeUnit.MILLISECONDS);
JTable table = new JTable(model);
JTableHeader head = table.getTableHeader();
Container c = getContentPane();
c.setLayout(new BorderLayout());
c.add("North", head);
c.add("Center",table);
}
public static void main(String[] argv)
{
JTableList jtable = new JTableList();
// JTableList.startThread();
jtable.setSize(500,400);
jtable.setVisible(true);
jtable.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
我尝试在每次更新时更新表的“模型”。我也尝试使用 SwingUtilities 线程。但是没有,相同的输出没有改变。我认为我的向量正在更新,但我的表格没有更新。您可以通过查看此链接获得一个清晰的概念:Christmas Tree in Jtable
我想要上面链接中显示的相同输出。请通过那个。一个经常更新的表。
例如,如果我从数据库中获取数据并将其存储在 JTable 并说显示它。现在如果数据库值发生变化 连续然后我的桌子也应该显示变化 不断给用户。这样用户就会知道数据在哪里 变化。
【问题讨论】:
标签: java multithreading swing