Несколько видов на один и тот же JTextArea? - PullRequest
1 голос
/ 01 марта 2011

Я хотел бы создать компонент, который показывает все совпадения набора слов в JTextArea, а также некоторый контекст (N строк, возможно, настраивается пользователем).

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

Но есть ли такой класс, как JViewport, способный рисовать только несколько представлений базового компонента? Поскольку JViewport является обычным компонентом Swing, как только вы помещаете ту же текстовую область в другое окно просмотра, он отсоединяется от первого.

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

Ответы [ 3 ]

2 голосов
/ 01 марта 2011

Проблема здесь в том, что JViewport является обычным контейнером и обрабатывает свой компонент представления как дочерний компонент (и каждый компонент может быть только дочерним в одном контейнере).Это вполне разумно, учитывая, что всегда только один компонент может иметь фокус и подобные вещи.

Я не знаю ни одного JViewport-подобного класса, который бы делал то, что вы хотите (рисует вид компонентане будучи его родителем), но в вашем случае вы можете добиться почти того же, используя две JTextAreas, совместно использующие один и тот же документ.Думаю, вам нужно было бы синхронизировать движения каретки (если пожелаете).

0 голосов
/ 01 марта 2011

Раскрасьте свою JTextArea в изображение и используйте необходимые фрагменты изображения.Сохраняйте границы изображения в исходной JTextArea, поэтому, нажимая на изображение, которое вы можете рассчитать, щелкните JTextArea, чтобы получить правильное положение.

0 голосов
/ 01 марта 2011

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

...