如何在JTextPane中轻松编辑所选文本的样式?

如何在JTextPane中轻松编辑所选文本的样式? 这方面似乎没有太多资源。 即使你可以指导我找到一个很好的资源,我也会非常感激。

另外,如何获取所选文本的当前样式? 我试过styledDoc.getLogicalStyle(textPane.getSelectionStart()); 但它似乎没有起作用。

看看这个pastebin中的以下代码:

http://pbin.oogly.co.uk/listings/viewlistingdetail/d6fe483a52c52aa951ca15762ed3d3

这个例子来自这里:

http://www.java2s.com/Code/Java/Swing-JFC/JTextPaneStylesExample3.htm

看起来您可以在动作侦听器中使用以下内容更改样式:

 final Style boldStyle = sc.addStyle("MainStyle", defaultStyle); StyleConstants.setBold(boldStyle, true); doc.setCharacterAttributes(0, 10, boldStyle, true); 

它将给定偏移量和长度之间的文本样式设置为特定样式。

有关详细信息,请参阅完整的pastebin。 这应该可以解决你的问题。

这是一个插入格式化的“Hello World!”的代码片段。 JEditorPane字符串:

 Document doc = yourEditorPane.getDocument(); StyleContext sc = new StyleContext(); Style style = sc.addStyle("yourStyle", null); Font font = new Font("Arial", Font.BOLD, 18); StyleConstants.setForeground(style, Color.RED); StyleConstants.setFontFamily(style, font.getFamily()); StyleConstants.setBold(style, true); doc.insertString(doc.getLength(), "Hello World!", style); 

操作文本面板的最简单方法是使用编辑器工具包及其相关操作 。 您可以在JDK示例中找到此演示(在jdk \ demo \ jfc \ Stylepad下 )。

安装StyledEditorKit并使用FontSizeAction操作文本的示例代码:

  public static void main(String[] args) { // create a rich text pane JTextPane textPane = new JTextPane(); JScrollPane scrollPane = new JScrollPane(textPane, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); // install the editor kit StyledEditorKit editorKit = new StyledEditorKit(); textPane.setEditorKit(editorKit); // build the menu JMenu fontMenu = new JMenu("Font Size"); for (int i = 48; i >= 8; i -= 10) { JMenuItem menuItem = new JMenuItem("" + i); // add an action menuItem .addActionListener(new StyledEditorKit.FontSizeAction( "myaction-" + i, i)); fontMenu.add(menuItem); } JMenuBar menuBar = new JMenuBar(); menuBar.add(fontMenu); // show in a frame JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(600, 400); frame.setJMenuBar(menuBar); frame.setContentPane(scrollPane); frame.setVisible(true); } 

(提示:如果要使用FontFamilyAction ,请查看GraphicsEnvironment.getAvailableFontFamilyNames()和逻辑字体系列名称 。)

我建议你看一下关于编辑器窗格的Sun的Java教程 。

好的,哇 难以回答的问题。 所以我还没有找到一种方法来获得给定角色的风格。 但是,您可以获取给定字符的MutableAttributeSet,然后测试该样式是否在该属性集中。

  Style s; //your style Element run = styledDocument.getCharacterElement( textPane.getSelectionStart() ); MutableAttributeSet curAttr = ( MutableAttributeSet )run.getAttributes(); boolean containsIt = curAttr.containsAttributes( s ); 

获取一系列字符的样式的一个问题是可能有多个样式应用于该范围(例如:您可以选择文本,其中一些是粗体而一些不是)。

要更新所选文本,您可以:

  Style s; //your style JTextPane textPane; //your textpane textPane.setCharacterAttributes( s, false ); 

哦,似乎函数getLogicalStyle不起作用,因为它返回包含p的段落的默认样式(或者可能只是样式),而不是p处的字符样式。