Включить ScrollPane, когда компоненты выходят за пределы текстовой области
Прежде всего могут быть люди, которые уже задавали этот вопрос. Однако, я уверен, что я не мог гуглить это. Во всяком случае, у меня есть scrollPane, который имеет viewPortView textArea. Мой вопрос заключается в том, что я хотел бы показать свою полосу прокрутки, когда я вставляю многочисленные компоненты внутри моей текстовой области. Как я должен это сделать? Я понятия не имею, и я не такой специалист по Javax Swing. Код выглядит так:
textArea = new JTextArea();
scrollPane = new JScrollPane();
textArea.setBounds(0,50,520,550);
textArea.setBackground(Color.DARK_GRAY);
scrollPane.setBounds(textArea.getBounds());
scrollPane.setViewportView(textArea);
Спасибо за помощь!
2 ответа
Мой вопрос заключается в том, что я хотел бы показать свою полосу прокрутки, когда я вставляю многочисленные компоненты внутри моей текстовой области.
В текстовой области отображается текст, а не компоненты. Полосы прокрутки появятся автоматически, когда вы фактически добавите текст в текстовую область.
textArea.setBounds(0,50,520,550);
Не используйте setBounds. Swing был разработан для использования с менеджерами верстки. В частности, JScrollPane будет работать правильно только при использовании менеджеров компоновки.
//textArea = new JTextArea();
textArea = new JTextArea(5, 20);
При создании JtextArea используйте код, подобный приведенному выше. Это позволит текстовой области определять свой собственный предпочтительный размер. Затем полосы прокрутки появятся, как только вы добавите более 5 строк текста.
Прочитайте раздел учебника Swing о том, как использовать текстовые области, для получения дополнительной информации и рабочих примеров. Держите ссылку на учебник под рукой для всех основ Swing.
Просто для информации,
Если в вашей текстовой области несколько строк, полоса прокрутки по умолчанию прокручивается до конца текстовой области. Чтобы обернуть строки в текстовой области и прокрутить полосу до верхней части текстовой области, следующий код поможет
textArea .setWrapStyleWord(true);
textArea .setLineWrap(true);
DefaultCaret caret = (DefaultCaret) textArea .getCaret();
caret.setUpdatePolicy(DefaultCaret.NEVER_UPDATE);