Domanda

Tutti,

Sono in esecuzione in un problema utilizzando JTextArea e JScrollPane. Per qualche motivo il riquadro di scorrimento sembra non riconoscere l'ultima riga del documento, e scorre solo in fondo alla riga prima di esso. La barra di scorrimento non ha nemmeno passare a uno stato in cui posso farlo scorrere fino a quando le linee nel documento sono due maggiore del numero di linee spettacoli textarea (che dovrebbero accadere, non appena si tratta di uno più grande).

ha eseguito nessuno nella prima? Quale potrebbe essere una buona soluzione (voglio evitare di dover aggiungere una riga in più 'vuota' alla fine del documento, che avrei dovuto togliere ogni volta che aggiungere una nuova riga)?

Ecco come ho un'istanza TextArea e ScrollPane:

JFrame frame = new JFrame("Java Chat Program");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Container pane = frame.getContentPane();
if (!(pane.getLayout() instanceof BorderLayout)) {
    System.err.println("Error: UI Container does not implement BorderLayout.");
    System.exit(-1);
}

textArea = new JTextArea();
    textArea.setPreferredSize(new Dimension(500, 100));
    textArea.setEditable(false);
    textArea.setLineWrap(true);
    textArea.setWrapStyleWord(true);
JScrollPane scroller = new JScrollPane(textArea);
    scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
    pane.add(scroller, BorderLayout.CENTER);

Ecco il metodo che uso per aggiungere una nuova riga alla textArea:

public void println(String a)
{
    textArea.append(" "+a+"\n");
    textArea.setCaretPosition(textArea.getDocument().getLength());
}

Grazie per il vostro aiuto,

Jonathan

EDIT: Inoltre, come nota a margine, con il codice corrente devo scorrere manualmente verso il basso. Ho supposto che setCaretPosition (doc.getLength ()) nel metodo println (linea) sarebbe automaticamente impostare la pagina verso il basso dopo una riga viene inserita ... che dovrebbe essere il caso, o ho bisogno di fare qualcosa di diverso?

È stato utile?

Soluzione

Il problema è textArea.setPreferredSize(new Dimension(500, 100));

Rimuovi questo. Impostare la perferredSize del ScrollPane o la dimensione della cornice, invece

Altri suggerimenti

Si tratta di una soluzione? Non ho prove, quindi per favore non mi uccide.

scroller.getVerticalScrollBar().setValue(pane.getVerticalScrollBar().getMaximum());
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top