我正在做一个学校项目,我希望你们能帮助我。 我有这个:
JTextArea processTxt = new JTextArea();
当我按下此按钮时,
JButton sortBtn = new JButton("SORT!");
这会在processTxt
上显示。
public void sort(String type, String order, int size) {
int tempInt, int1, int2;
processTxt.append("Pass 0:\n");
for (int i=0; i<size; i++) {
if (type.equals("int")) {
processTxt.append(intList.get(i)+" ");
}
}
processTxt.append("\n");
for (int i=0; i<size-1; i++) {
int x=0;
processTxt.append("Pass "+(i+1)+": \n");
while (x<size-1) {
int y = x + 1;
if (type.equals("int")) {
int1 = intList.get(x);
int2 = intList.get(y);
if (order.equals("asc")) {
if (int1 >= int2) {
tempInt = int1;
intList.set(x, int2);
intList.set(y, int1);
}
}
else if (order.equals("desc")) {
if (int1 <= int2) {
tempInt = int1;
intList.set(x, int2);
intList.set(y, int1);
}
}
}
for (int z=0; z<size; z++) {
if (type.equals("int")) {
processTxt.append(intList.get(z)+" ");
}
}
processTxt.append("\n");
x++;
}
}
processTxt.append("Sorted:\n");
for (int i=0; i<size; i++) {
if (type.equals("int")) {
processTxt.append(intList.get(i)+" ");
}
}
}
我在想:
int1
的位置?thread.sleep()
但它不起作用。答案 0 :(得分:1)
1)我怎样才能在textarea上获得int1的位置;
除了物理搜索文本外,您还可以在插入之前保持对插入位置的引用。
如果要在当前光标位置插入文本,则可以使用JTextArea
的插入位置,否则,您需要确定要更新的Document
内的索引点。 / p>
2)有什么方法可以使用计时器来延迟textarea的输出?我使用过thread.sleep()但它不会工作。
是的,但要明白,这变得越来越复杂。
您可以使用Swing Timer
,它将定期触发回调,允许您更新排序状态并更新UI。这很有用,因为它在Event Dispatching Thread的上下文中触发回调,从而可以安全地从内部更新UI。
它确实增加了复杂性,因为Timer
充当了一种伪循环。
您可以使用SwingWorker
代替。这将允许您获取当前代码并在doInBackground
方法中运行它,该方法在事件调度线程之外执行,允许您使用Thread.sleep
在不需要影响的情况下注入延迟用户界面。
问题是,您需要使用SwingWoker
s publish
/ process
方法将更新推送到用户界面,这会断开您对模型进行更改的时间它在UI中出现的时间,这可能会出现确定给定更新应该发生的位置的问题(在第一个问题的上下文中)。
看看:
了解更多详情