JTextArea - dimensione molto piccola con testo lungo
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!
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.