获取JTextArea中的位置并使用计时器

时间:2015-02-23 00:01:17

标签: java swing jtextarea

我正在做一个学校项目,我希望你们能帮助我。 我有这个:

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)+" ");
                }
            }
        }

我在想:

  1. 我怎样才能在文本区域获得int1的位置?
  2. 有什么方法可以使用计时器来延迟文本区域的输出?我使用过thread.sleep()但它不起作用。

1 个答案:

答案 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中出现的时间,这可能会出现确定给定更新应该发生的位置的问题(在第一个问题的上下文中)。

看看:

了解更多详情