Включить 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);
Другие вопросы по тегам