JTextPane - как стилизовать выделенный текст - PullRequest
1 голос
/ 25 сентября 2011

Я ищу самый простой способ управления цветом шрифта JTextPane (его внутреннего текста) и размером шрифта только в пределах выделенного текста.

Я знаю, что должен взглянуть на StyledDocument, но его фрагменты показывают приемы прослушивания действий JMenu, но не JButton :(

Я не смог найти фрагменты кода, которые могли бы показать, как изменить стиль выделенный текст по нажатию JButton (метод actionPerformed (...)) и т. Д .:(

Я имею в виду что-то в этом направлении

  • А) У меня есть текст в JTextPane, позволяющий сказать: «Мой дом превращается в борабора, а это ... "
  • B) Текст "борабора" выделен в JTextPane
  • C) JButton ("size = 16") был нажат
  • Г) Размер текста "борабора" становится 16

Я не смог найти такого рода фрагменты, поэтому мне нужен ваш совет.

Любой полезный комментарий приветствуется

Ответы [ 3 ]

2 голосов
/ 25 сентября 2011

, но его фрагменты показывают приемы прослушивания действий JMenu, но не JButton

Вы можете добавить как действие к JButton, так и к JMenu. Например:

Jbutton button = new JButton( new StyledEditorKit.FontSizeAction("16", 16) );

Вы можете использовать стили, если хотите применить несколько свойств одновременно к фрагменту текста.

2 голосов
/ 25 сентября 2011

В вашем методе actionPerformed соответствующей кнопки вы можете запустить это.(при необходимости измените.)

String text = jTextPane.getSelectedText();
int cursorPosition = jTextPane.getCaretPosition();

StyleContext context = new StyleContext();
Style style;

jTextPane.replaceSelection("");

style = context.addStyle("mystyle", null);
style.addAttribute(StyleConstants.FontSize, new Integer(16));
jTextPane.getStyledDocument().insertString(cursorPosition - text.length(), text, style);
0 голосов
/ 02 июля 2013

На основании ответа @scartag и комментария об API (от @kleopatra) я нашел другой способ сделать это.

StyleContext context = new StyleContext();
Style style = context.addStyle("mystyle", null);
style.addAttribute(StyleConstants.FontSize, new Integer(16));;
jTextPane.setCharacterAttributes(style , true);

Метод setCharacterAttributes(style, replace) изменяет стиль выделенного текста, поэтому вам не нужно удалять его и добавлять снова с новым стилем. И более того, логическая замена указывает, заменяет ли стиль старый стиль (true) или добавляется ли старый стиль (false).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...