2012-01-15 3 views
-1

Я пытаюсь создать редактор без полос прокрутки с помощью jtextarea, поэтому, если текст слишком длинный, чтобы вписаться в jtextarea, он должен быть разделен на более мелкие подстроки, которые можно редактировать в jtextarea, не показывая вертикальную полосу прокрутки потому что легко избавиться от горизонтального, используя setLineWrap и setWrapStyleWord. Я попытался использовать вертикальный scrollbar adjusmentListener, чтобы прослушать его изменения, но он не работает, потому что методы jextarea append и setText активированы в конце бизнес-логики, поэтому я попытался использовать многопоточность и SwingWorker для вызова этих методов, но также не работает. Я также пытался использовать repaint, revalidate и обновлять методы без надежды. пожалуйста, помогите мне передать эту проблему и заблаговременно.Как поместить текст в jtextcomponent

ответ

0

Благодарим вас за то, что вы и на воздушной подушке, и у Робин, я получил его, ваши ответы повлияли на меня правильно, я нашел точный ответ в книге «Core Swing: advanced programming», используя JTextArea.modelToView(), передавая длину документа JTextArea как Параметр this method возвращает объект Rectangle, координация которого представляет координацию конечного символа, а затем сравнивает эту координацию с нижним углом JTextArea, чтобы увидеть, достигнет ли этот конечный шар этому дну или нет.

1

Я пытаюсь разработать редактор без скроллинга с помощью JTextArea, поэтому, если текст слишком длинный, чтобы поместиться в JTextArea она должна быть разделена на более мелкие подстроки, которые могут быть изменены в пределах JTextArea, не показывая вертикальную полосу прокрутки, потому что это легко избавиться от горизонтального, используя setLineWrap и setWrapStyleWord.

Я не уверен, что полностью понимаю это. Может быть, вы можете объяснить дальше? Почему бы не разместить JTextarea внутри JScrollPane? Каково ваше желаемое поведение, если текст, который он содержит, больше, чем тот, который может отображать JTextArea?

Я попытался использовать вертикальную полосу прокрутки adjusmentListener слушать его изменения, но он не работает, потому что JTextArea Append и SetText методы активируются в конце бизнес-логики, так что я пытался использовать многопоточный и SwingWorker вызывать эти методы, но также не работает. Я также пытался использовать repaint, revalidate и обновлять методы без надежды.

Если вы хотите уловить введенный текст перед тем, как он зафиксирован для текстового компонента, рассмотрите возможность установки DocumentFilter в соответствующий документ JTextArea (PlainDocument).

+0

Спасибо большое * Hovercraft Full Eels * за ответ, дорогой, я не хочу показывать JScrollPane, потому что это предварительное требование домашней работы. – muaz

+0

Однако; чтобы понять, что если String, который мне нужно установить или добавить в JTextArea, слишком длинная, и это приведет к отображению вертикальной полосы прокрутки, эта строка должна быть разделена на более короткие подстроки – muaz

+0

, каждый из которых может быть установлен в JTextArea без отображения вертикального ScrollBar и последовательно показывать их в JTextArea в ответ на событие, такое как нажатие кнопки, так же как и DocumentFilter, помог мне с этим ??? thanks – muaz

1

Как уже было предложено наводнение на воздушной подушке, вы должны взглянуть на интерфейсы Document, DocumentFilter и/или DocumentListener.

Регулируя те, у вас есть полный контроль над тем, какой текст отображается, когда кто-то хочет добавить текст. Например, вы можете удалить первую часть текста до/после добавления нового текста, что ограничивает количество строк/символов в документе.

Swing tutorial about textcomponents содержит такой пример в разделе Implementing a DocumentFilter, где DocumentSizeFilter класса является тот, который вы ищете (не часть JDK, часть коды учебника Swing). Как уже было предложено в качестве комментария в этом образце кода, было бы возможно удалить первую часть документа при добавлении нового текста, который слишком долго будет содержать содержимое, но я оставлю это до вас, поскольку он помечен как домашнее задание.

+0

Благодарим вас за ответ Robin, но DocumentSizeFilter нужно указать максимальное количество символов вручную, поэтому при изменении размера окна или изменении размера шрифта ScrollBar появится снова, мне нужно получить максимально отображаемое количество символов, разрешенное без появления ScrollBar и все проблемы исчезнут, спасибо большое – muaz

+0

BTW это читатель документов как проект термина, а не домашнее задание;) спасибо Robin – muaz

+0

Я предлагаю посмотреть, как получить getters на 'JTextArea' (' getRows', 'getColumns', ...). Я уверен, что вы можете что-то понять, чтобы избежать жесткого кодированного максимального количества символов и поддерживать текстовую область с динамическим размером – Robin

Смежные вопросы