Разве нельзя динамически добавлять текст в одну JTextArea? - PullRequest
0 голосов
/ 08 мая 2011

Я разрабатываю графический интерфейс с использованием Java Swing.но я застрял здесьРазве невозможно добавить текст в одиночную «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 done».но вместо этого я хочу, чтобы он отображался в одном кадре 'n;раз.

Ответы [ 3 ]

3 голосов
/ 08 мая 2011

Я бы изменил ваш код на:

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 ***

        }  
    }
}

Мы сможем предоставить вам более подробную информацию, если / когда вы покажете нам, что вы делаете, в закомментированных битах в коде исходного сообщения.

2 голосов
/ 08 мая 2011
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);
            }
        });
    }
}
0 голосов
/ 08 мая 2011

setText() метод устанавливает текст, а не добавляет его. Вам придется сделать это вручную:

ta.setText(ta.getText() + "\nStep is done.");

EDIT:

Плохо, я некоторое время не пользовался Swing и просто забыл о такой простой вещи, как append(). Вы должны принять ответ @Hovercraft Full Of Eels, так как он правильный и намного лучший.

...