我正在编写一个程序,我将名称与列表匹配。如果我没有匹配,我会在SQLite DB上查找名称,将名称信息提取到文本字段中,然后显示卡片(cardlayout)。当我运行这个时,我只获得了最后一次不匹配的信息。在研究这个时,我想我可以使用SwingWorker解决这个问题。我把我的do-while放在一个SwingWorker类中并添加了一个publish(),我想在那里显示信息。我得到相同的结果,只显示最后一个不匹配。
以下是我的代码片段:
public class processTeeTimes extends SwingWorker <Integer, String>
{
@Override
protected Integer doInBackground() throws Exception
{
// Process all tee times foursome at a time
String memberGuest; // Member or guest
do // Process players in foursome
{
.
.
.
if (!firstOnGHIN())
{
System.out.print("No match - first (" + tsTime + "): ");
printGolfer(); // Print no match
publish(golfer[0]);
}
.
.
.
}
while (!EOF)
}
@Override
protected void process(List<String> golferList)
{
for (int gIndex = 0; gIndex < golferList.size(); gIndex++)
{
textFieldRMLast.setText(golferList.get(gIndex));
cards.show(panelCont, ROSTERMAINT); // Show roster maint card
}
}
@Override
protected void done()
{
.
.
.
System.out.println("All done processing Tee Sheet");
}
任何帮助都将不胜感激。
答案 0 :(得分:4)
我得到相同的结果,只显示最后一次不匹配。
因为这就是您的代码似乎正在做的事情:
for (int i = 0; i < n; i++)
您将数据放入JTextField,遇到更多数据时,它会立即用新文本替换以前的文本。如果要显示多行数据,则应使用显示多行数据的组件,例如JList或JTable。
如果您希望在JTextField中查看数据之间有延迟,请考虑在 @Override
protected void process(List<String> golferList)
{
for (int gIndex = 0; gIndex < golferList.size(); gIndex++)
{
textFieldRMLast.setText(golferList.get(gIndex));
cards.show(panelCont, ROSTERMAINT); // Show roster maint card
}
}
方法中调用的do-while循环中放置Thread.sleep(...)
。不要在上面的for循环中放置doInBackground()
,因为上面的代码是在Swing事件线程上调用的。
请注意,如果此答案没有回答您的问题,那么是的,您需要创建并发布有效的MCVE。