В следующем SSCCE вы видите, что появляется горизонтальная полоса прокрутки, хотя можно было бы просто использовать вертикальную полосу прокрутки. Это всего лишь пример. Я использую свой собственный LayoutManager, а не BoxLayout, но если у вас есть решение для этого, я, вероятно, могу использовать его в своем собственном LayoutManager.
Я уже пробовал использовать пользовательский JPanel, который реализует Scrollable, а затем переопределить TrackScrollableViewportWidth и вернуть true, но не получил то, что хотел. Текст был обрезан с правой стороны.
Другое дело, это не так важно, но все же меня раздражает: если вы увеличиваете ширину окна, горизонтальная полоса прокрутки исчезает, а JTextArea также увеличивается в ширину. Но если вы уменьшите ширину окна, JTextArea не отрегулирует его ширину соответственно.
Спасибо заранее. Вот SSCCE:
import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.WindowConstants;
public class MyFrame extends JFrame
{
private static final long serialVersionUID = 1L;
public static void main(final String[] args)
{
new MyFrame();
}
private MyFrame()
{
setTitle("Scrollbars and width");
setSize(800, 200);
setResizable(true);
setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
final JPanel container = new JPanel();
final BoxLayout layout = new BoxLayout(container, BoxLayout.Y_AXIS);
container.setLayout(layout);
final JTextArea area1 = new JTextArea();
area1.setText("1sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf ");
area1.setLineWrap(true);
area1.setWrapStyleWord(true);
area1.setEditable(false);
area1.setForeground(Color.RED);
container.add(area1);
final JTextArea area2 = new JTextArea();
area2.setText("2sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf sdh jsdfk laskdf hdkf hsjdf ");
area2.setLineWrap(true);
area2.setWrapStyleWord(true);
area2.setEditable(false);
area2.setBackground(Color.RED);
container.add(area2);
final JScrollPane scrollbox = new JScrollPane(container);
this.getContentPane().add(scrollbox, BorderLayout.CENTER);
this.getContentPane().invalidate();
this.getContentPane().validate();
}
}