如何在JTEXTPANE中轻松编辑所选文本的样式?
题
如何在JTEXTPANE中轻松编辑所选文本的样式?似乎没有很多资源。即使您可以将我引导到这一点上,我也要感谢它。
另外,如何获得所选文本的当前样式?我试过了 styledDoc.getLogicalStyle(textPane.getSelectionStart());
但这似乎没有起作用。
解决方案
查看此粘贴中的以下代码:
http://pbin.oogly.co.uk/listings/viewlistingdetail/d6fe483a52c52c52aa951ca15762ed3d3
该示例来自这里:
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).
安装的示例代码 风格 并使用 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() 和 逻辑字体姓.)
我建议看看太阳 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处的字符样式。