【问题标题】:JTextPane - how to style selected textJTextPane - 如何设置选定文本的样式
【发布时间】:2014-10-08 04:53:03
【问题描述】:

我正在寻找仅在选定文本中控制 JTextPane(其内部文本)字体颜色和字体大小的最简单方法。

我知道我必须查看 StyledDocument,但它的 sn-ps 显示了 JMenu 动作侦听器技巧,但没有显示 JButton :(

我找不到可以显示如何通过单击 JButton(actionPerformed(...) 方法)等来更改 选定文本 样式的代码 sn-ps :(

我的意思是这个方向

  • A) 我在 JTextPane 中有一个文本,可以说“我的家要变成 borabora,这是……”
  • B) 在 JTextPane 中选择了文本“borabora”
  • C) JButton("size=16") 被点击
  • D) 文本“borabora”大小变为 16

我找不到这种 sn-ps,所以我需要你的建议。

感谢任何有用的评论

【问题讨论】:

  • ActionListeners 和 JButtons 与你的问题无关。

标签: java swing user-interface


【解决方案1】:

在适用的 jbutton 的 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);

【讨论】:

  • 非常有趣的谢谢。如我所见,它总是在这里使用 insertString 吗?那么我应该插入修改后的文本而不是之前的文本吗?是大战略还是有别的办法?
  • 我确信它们是更好的方法。我目前用空字符串替换所选区域..根据需要对保存的文本应用样式并插入先前选择的文本的位置。
  • 哦 :) 我明白了,那么应该有替代品吗?好的,我会朝这个方向尝试并尽快报告我的结果:)
  • -1 表示不阅读 api 文档(+0.2 表示有预感显示某些东西......次优;-)
  • 谢谢。 sn-p 帮助很大:)
【解决方案2】:

但它的 sn-ps 显示了 JMenu 动作侦听器技巧而不是 JButton

您可以将动作添加到 JButton 以及 JMenu。例如:

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

当您想一次将多个属性应用于一段文本时,您可以使用样式。

【讨论】:

  • Action italicAction = new ItalicAction(); italicAction.putValue(Action.NAME, "斜体"); styleMenu.add(italicAction);
  • 好的,但是如何听这个动作我的意思是 Jbutton button = new JButton( new StyledEditorKit.FontSizeAction("16", 16) ); ?
  • 我已经给你答案了。它的一行代码。您所要做的就是尝试一下。
  • 不,我的意思是如何使用它的 actionPerformed() 方法呢?以及如何捕捉选择了哪些文本以使其大小为 16 或者它是一些自动的东西?
  • 它和任何编辑器一样。首先选择文本,然后单击按钮。
【解决方案3】:

根据@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)。

【讨论】:

    猜你喜欢
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多