Эта проблема выглядит тривиальной, но я не могу найти решение.
Когда я создаю форму, она содержит a JTextArea
. Я хочу поместить большой постоянный текст в него. Если текст, говорят, что 1 000 строк долго, я хочу мой JTextArea
быть 1 000 строк высоко (чтобы быть достаточно большим для отображения всего текста без полос прокрутки). JTextArea
в панели, которая может иметь полосу прокрутки, таким образом, это не проблема, когда это становится слишком большим (существует два JTextArea
в той панели.. что-то как в различном инструменте). Кто-либо знает, как я могу достигнуть этого?Спасибо.
BorderLayout
будет обрабатывать полосу прокрутки прямо из коробки, если вы просто поместите свою JTextArea
в JScrollPane
, прежде чем добавлять ее в свою JPanel
. FlowLayout
, с другой стороны, этого не делает. Он не будет отображать полосу прокрутки, если, как намеревается @Xorty, вы не вызовете setPreferSize ()
на своем JScrollPane
и не зададите ему желаемое измерение.
Вы также можете использовать что-то вроде этого ( ограниченная ширина, высота зависит от текста, полезно при отображении информационных сообщений):
public JTextArea createTextAreaFitToText(String message, Dimension minimalSize){
JTextArea aMessagePanel = new JTextArea();
aMessagePanel.setText(message);
/*for modelToView to work, the text area has to be sized. It doesn't matter if it's visible or not.*/
aMessagePanel.setPreferredSize(minimalSize);
aMessagePanel.setSize(minimalSize);
Rectangle r = aMessagePanel.modelToView(aMessagePanel.getDocument().getLength());
Dimension d = new Dimension(minimalSize.width, r.y + r.height);
aMessagePanel.setPreferredSize(d);
return aMessagePanel;
}
Ну, во-первых: это JTextArea, а не jTextArea.
Теперь - поместите JTextArea в JScrollPane. Когда текст введен, вызовите getPreferedSize()
JScrollPane - это даст вам точный размер, необходимый для отображения всего текста. Кроме того, я никогда не использовал другой LayoutManager, кроме 'Free Design' из NetBeans Swing builder - поэтому я не уверен, как поведут себя другие LayoutManager'ы.