Dynamiczne dodanie linijki tekstu w JScrollPane

0

Jak dynamicznie wyświetlać linie tekstu w JScrollPane? JScrollPane tworze w ten sposób:

public class View extends javax.swing.JFrame
{
    private Controller controller;
    private JScrollPane pane;
(...)
 public View()
    {
(...)
pane = new JScrollPane();
(...)
GroupLayout layout = new GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
layout.setVerticalGroup(
            layout.createParallelGroup(LEADING)
            .addGroup(layout.createSequentialGroup()
(...)
.addComponent(pane, PREFERRED_SIZE, 82, PREFERRED_SIZE)
                .addContainerGap())
        );
        setVisible(true);
        pack();
    }

Linijkę w JScrollPane chciałbym wstawiać za pomocą funkcji. Próbowałem różnych sposobów, np.:

public void addFile(final String file)
    {System.out.println(file);
    javax.swing.JPanel p = new javax.swing.JPanel();
        pane.add(p);
        p.add(new javax.swing.JTextArea(file));
        getContentPane().add(pane);
    }

Jak zrobić, aby w JScrollPane pojawiała się linijka tekstu (najlepiej nieedytowalna) po wywołaniu funkcji?

0
    public class View extends javax.swing.JFrame
    {
    private Controller controller;
    private JScrollPane pane;
    private JTextArea ta;
    (...)
    public View()
    {
    (...)
    ta=new JTextArea(10,40); 
    ta.setEditable(false);
    pane = new JScrollPane(ta);
    (...)
    GroupLayout layout = new GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setVerticalGroup(
    layout.createParallelGroup(LEADING)
    .addGroup(layout.createSequentialGroup()
    (...)
    .addComponent(pane, PREFERRED_SIZE, 82, PREFERRED_SIZE)
    .addContainerGap())
    );
    setVisible(true);
    pack();
    }

A potem w odpowiednim momencie ta.append("nowa linijka\n");

0

Kiedyś sobie napisałem taką małą klasę:

class ScrollLogger extends JScrollPane {
	static int licznik=1;

	JTextArea out = new JTextArea();
	DefaultCaret caret = (DefaultCaret)out.getCaret();

	public ScrollLogger() {
		super();
		caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
		setViewportView(out);
		setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
		out.setDisabledTextColor(Color.BLACK);
		out.setEnabled(false);
	}

	public void dodajLinie(String text) {
		out.append("  "+String.valueOf(licznik)+".   "+text+"\n");
		licznik++;
	}
}

I sobie już tworzysz obiekt nie JScrollPane, tylko ScrollLogger. Np. tak:

ScrollLogger log = new ScrollLogger();

//ustawiasz sobie wielkosc miejsce na ekranie itd.

log.dodajLinie("nowa linia");
log.dodajLinie("druga nowa linia");
...

1 użytkowników online, w tym zalogowanych: 0, gości: 1