在Textarea(Java)中更新实例变量

时间:2017-05-24 21:09:30

标签: java swing

我试图创建一个代码,它将每三秒更新一次并添加一个实例变量。这是我目前的一段代码

定时器:

 public rityta() {
        initComponents();
            //Timer
        time = new Timer(1000, null);
        time.addActionListener(this);
        time.start();
    }


public void actionPerformed(ActionEvent ae) {
    Object o = ae.getSource();
     if (o == time) {
        tid++;
        if (tid % 3 == 0) { //Every three seconds
            for (int i = 0; i < djur.size(); i++) {              //Wont start until something's been added to tha ArrayList named "djur"
                djur.get(i).setValue(djur.get(i).getValue()+1);  //Get the instance variable and adds one
                System.out.println(djur.get(i).getValue());      //Just a proof of concept that it works, the output window updated every three seconds and adds 1
                jTextArea2.update(jTextArea2.getGraphics());     // Is this needed?
            }

        }
    }
}

问题 现在,由于输出使用我的类中的新实例变量每三秒更新一次,显示实例变量的Textarea也应该更新,对吧?但它不会。那么如何在我的Textarea中更新新的实例变量呢?

由于我的TextArea还包含我的ArrayList的ToString,因此TextArea看起来像这样:

Name: aaa    Value: 10
Name: bbb    Value: 10

我只想更新10的实例变量,每三秒钟加1。 :)

1 个答案:

答案 0 :(得分:3)

您不应该期望JTextArea自动更新,因为您从未在其上调用setText(...)append(...),并且仅因为变量已更改,其在JTextArea中的字符串表示将不会自动发生这种情况时会改变要更新JTextArea,必须在其上调用这些方法(setText或append),或者必须修改JTextArea的文档(但要小心这样做)。

至于此:jTextArea2.update(jTextArea2.getGraphics());你永远不需要这样做,也不应该这样做。

作为#1的旁边,我想知道你是否真的想要使用JList或JTable而不是JTextArea,但是我无法确切地说出你的问题空间和你的详细信息。代码。

除了#2:请考虑更改您的用户名。你和我们所有人一样,天生无知,但希望不是愚蠢的,因为前者可以通过勤奋的努力得到改善,而后者则不能。

关于:

  

由于我的TextArea还包含我的ArrayList的ToString,因此TextArea看起来像这样:

Name: aaa    Value: 10
Name: bbb    Value: 10
     

我只想更新10的实例变量,每三秒钟加1。 :)

您似乎正在显示可变表格数据,频繁更改的数据,因此在这种情况下,我认为您最好使用专为此类生成的工具情况,JTable。如果你这样做了,那么你只需要在更新参考数据时更改JTable模型中的相关单元格数据,并且因为你要连接模型以通知其视图(JTable本身)每当它发生变化时,你的数据显示都会自动更新。