是否无法动态地将文本添加到单个JTextArea?

时间:2011-05-08 13:50:37

标签: java swing jtextarea

我正在使用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;倍。

3 个答案:

答案 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的答案,因为它是正确的,更好的答案。