我试图创建一个代码,它将每三秒更新一次并添加一个实例变量。这是我目前的一段代码
定时器:
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。 :)
答案 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本身)每当它发生变化时,你的数据显示都会自动更新。