Компонент вставки JTextPane, неправильное вертикальное выравнивание - PullRequest
1 голос
/ 28 июня 2011

У меня есть JTextPane, в который мне нужно вставить JComponent. Я использую

JTextPane.insertComponent(Component)

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

Я попытался вызвать setAlignmentY (float) с различными значениями как для вставленного компонента, так и для JTextPane, но это никак не влияет на поведение.

Мое предположение: внутри моего JTextPane или его документа, похоже, есть какое-то состояние, которое мне нужно изменить. Но я не знаю, что это такое.

Ответы [ 3 ]

0 голосов
/ 21 декабря 2012

Я знаю, это довольно старый вопрос, но ваш подход к использованию setAlignmentY абсолютно верен.Не знаю, какой код заставил его не работать, но Javadoc JTextPane.insertComponent (Component) говорит следующее о выравнивании:

Компонент размещен относительно базовой линии текста в соответствии сзначение, возвращаемое Component.getAlignmentY.Для компонентов Swing это значение может быть удобно установлено с использованием метода JComponent.setAlignmentY.Например, установка значения 0,75 приведет к тому, что 75 процентов компонента окажутся выше базовой линии, а 25 процентов компонента будут ниже базовой линии

Таким образом, использование textPane.setAlignmentY(1.0f) дает желаемый эффект.

0 голосов
/ 09 января 2015

Я столкнулся с той же проблемой и не смог найти решение, используя JTextPane или JEditorPane. Но я смог использовать JavaFX / WebView / WebEngine / JFXPanel. Вам нужно будет обновить до Java 8 (JDK 1.8). Я создал свой собственный класс HTMLPaneType, расширение JFXPanel, и использую HTMLPaneType вместо JTextPane.

JTextPane требует добавления HyperlinkListener, если вы хотите отвечать на клики href. HTMLPaneType требует добавления прослушивателя, если вы не хотите отвечать на клики href или реагировать по-другому. В моем случае я хотел запустить внешний браузер по щелчку мыши. Я смог сделать это как с JTextPane, так и с расширенной JFXPanel. Смотри также
http://blogs.kiyut.com/tonny/2013/07/30/javafx-webview-addhyperlinklistener/#.VK-JIHsueWN

0 голосов
/ 28 июня 2011

Вы пытались вызвать setSize(width, height) на JComponent, прежде чем вставить его в JTextPane?Это должно работать для большинства компонентов.

...