Domanda

Sto usando un JTextArea per visualizzare un lungo testo

JTextArea _definition = new JTextArea(5, 50);

con a capo automatico

_definition.setLineWrap(true);
_definition.setWrapStyleWord(true);

incorporato in un JScrollPane

add(new JScrollPane(_definition), gbc);

Tutto ciò che fa parte di JPanel con GridBagLayout.

Tutto funziona bene con testo più corto, ma quando aggiungo un testo lungo con linee e la barra di scorrimento è richiesta, pack () va a sud e tutti i componenti hanno solo una dimensione minima e la finestra di dialogo è inutilizzabile (non è solo il TextArea interessato.)

Ho provato a capire cosa sta succedendo, ma tutto quello che ho potuto capire è che ha a che fare con il testo in TextArea. Sono bloccato .. qualche idea? Grazie!

È stato utile?

Soluzione 2

L'ho fatto funzionare .. La risposta di Ross mi stava dando alcuni termini migliori da cercare, quindi grazie per avermi aiutato indicando nella giusta direzione!

 pack();
 _definition.setSize(_definition.getPreferredSize());
 pack();

Quindi doppio imballaggio più qualche strano ... comportamento extra.

Altri suggerimenti

Prova a chiamare pack () due volte. JTextArea ha un comportamento strano come descritto in questa voce nel database dei bug Java . Riporta inizialmente la sua dimensione preferita come una voce a riga singola che è molto ampia (ad esempio una riga, un migliaio di colonne). Una volta realizzato che ha una certa larghezza, riporterà quindi una dimensione preferita corretta per il numero di righe necessarie.

Ho dovuto fare diverse cose per aggirare questo comportamento, inclusa la sottoclasse di JTextArea e modificando il suo comportamento per renderlo un po 'più intelligente. Il doppio pack () potrebbe funzionare per te in questo caso, oppure potresti dover ricorrere a modifiche più complicate a seconda di come tutto il layout si adatta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top