我正在使用Java Swing开发GUI。但我被困在这里 是否无法动态地向单个“JTextArea”添加文本?
例如:
class Sample extends JFrame{
public static void fn(int n) {
JFrame f = new JFrame();
JTextArea ta = new JTextArea();
f.add(ta);
f.setVisible(true);
for(int i=1;i<=n;i++){
//some processing is done
ta.setText(" step is done");
// some other stuffs
}
}
}
这只是我源代码的一部分。我的问题是,在这个代码中,对于“for循环”的每次迭代,我得到一个带有文本“step is done”的新框架。但我希望它显示在一个帧'n;倍。
答案 0 :(得分:3)
我会将您的代码更改为:
class Sample { // no need to extend JFrame here
public static void fn(int n) {
JFrame f = new JFrame();
JTextArea ta = new JTextArea();
f.add(ta);
f.setVisible(true);
for(int i = 0; i < n; i++) {
// ... *** don't create a new JFrame here ***
ta.append(" step is done\n");
// ... *** and don't create a new JFrame here ***
}
}
}
如果您在原始帖子代码中的注释位中向我们展示您正在做的事情,我们将能够为您提供更多详细信息。
答案 1 :(得分:2)
import javax.swing.*;
// don't extend JFrame unless adding functionality
//class Sample extends JFrame{
class Sample {
JTextArea ta;
Sample() {
JFrame f = new JFrame();
ta = new JTextArea(10,35);
// to look better
ta.setLineWrap(true);
ta.setWrapStyleWord(true);
//should be in a JScrollPane
f.add(ta);
// important
f.pack();
f.setVisible(true);
}
public void fn(int n) {
for(int i=1;i<=n;i++){
//some processing is done
ta.append(" step is done");
// some other stuffs
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Sample sample = new Sample();
sample.fn(40);
}
});
}
}
答案 2 :(得分:0)
setText()
方法设置文本,而不是附加文本。您必须手动执行此操作:
ta.setText(ta.getText() + "\nStep is done.");
我的不好,我没有使用Swing一段时间而只是忘记了append()
这样的基本内容。你应该接受@Hovercraft Full Of Eels的答案,因为它是正确的,更好的答案。