problemi con scrolling TextArea Java
-
26-09-2019 - |
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?
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());