我想为JTextArea实例中所选文本设置粗体字体样式。如何在JTextArea实例中为所选文本设置粗体字体样式
我试着这样说:
textArea.getSelectedText().setFont(new Font("sansserif",Font.BOLD, 12));
但它不工作。我也试过JTextPane
和JEditorPane
而不是JTextArea
,但没有效果。
我该怎么做?
我想为JTextArea实例中所选文本设置粗体字体样式。如何在JTextArea实例中为所选文本设置粗体字体样式
我试着这样说:
textArea.getSelectedText().setFont(new Font("sansserif",Font.BOLD, 12));
但它不工作。我也试过JTextPane
和JEditorPane
而不是JTextArea
,但没有效果。
我该怎么做?
你必须建立一个插入符侦听上的JTextPane听选择部分或全部文本时。
这是我创建的GUI。
而这里的代码:
package com.ggl.testing;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.SwingUtilities;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultStyledDocument;
import javax.swing.text.Style;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyleContext;
import javax.swing.text.StyledDocument;
public class JTextPaneTest implements Runnable {
private JTextPane textPane;
private StyledDocument styledDocument;
public static void main(String[] args) throws BadLocationException {
SwingUtilities.invokeLater(new JTextPaneTest());
}
public JTextPaneTest() throws BadLocationException {
this.styledDocument = new DefaultStyledDocument();
this.styledDocument.insertString(0, displayText(), null);
addStylesToDocument(styledDocument);
}
@Override
public void run() {
JFrame frame = new JFrame("JTextPane Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationByPlatform(true);
textPane = new JTextPane(styledDocument);
textPane.addCaretListener(new SelectedText());
textPane.setPreferredSize(new Dimension(250, 125));
JScrollPane scrollPane = new JScrollPane(textPane);
frame.add(scrollPane);
frame.pack();
frame.setVisible(true);
}
private String displayText() {
return "This is some sample text. Pick part of the text to select "
+ "by double clicking on a word.";
}
private void addStylesToDocument(StyledDocument styledDocument) {
Style def = StyleContext.getDefaultStyleContext().getStyle(
StyleContext.DEFAULT_STYLE);
Style s = styledDocument.addStyle("bold", def);
StyleConstants.setBold(s, true);
}
private class SelectedText implements CaretListener {
@Override
public void caretUpdate(CaretEvent event) {
int dot = event.getDot();
int mark = event.getMark();
if (dot != mark) {
if (dot < mark) {
int temp = dot;
dot = mark;
mark = temp;
}
boldSelectedText(mark, dot);
}
}
private void boldSelectedText(int mark, int dot) {
try {
int length = dot - mark;
String s = styledDocument.getText(mark, length);
styledDocument.remove(mark, length);
styledDocument.insertString(mark, s,
styledDocument.getStyle("bold"));
} catch (BadLocationException e) {
e.printStackTrace();
}
}
}
}
“*您必须在JTextArea *上设置插入符侦听器”,但是您需要为“JTextPane”执行此操作。 – user1803551
@ user1803551:你是对的。 JTextArea没有支持它的样式化文档。我忘了更改JFrame标题。我已经解决了答案。 –
您可以使用类似于更改颜色的JTextPane
组件,如以下答案中所述:How to set font color for selected text in jTextArea。
例如:
import javax.swing.JFrame;
import javax.swing.JTextPane;
import javax.swing.WindowConstants;
import javax.swing.text.Style;
import javax.swing.text.StyleConstants;
public class BoldSelected {
public static void main(final String[] args) {
new BoldSelected().launchGui();
}
private void launchGui() {
final String title = "Set bold font style for selected text in JTextArea instance";
final JFrame frame = new JFrame("Stack Overflow: " + title);
frame.setBounds(100, 100, 800, 600);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
final JTextPane textPane = new JTextPane();
textPane.setText(title + ".");
final Style style = textPane.addStyle("Bold", null);
StyleConstants.setBold(style, true);
textPane.getStyledDocument().setCharacterAttributes(4, 33, style, false);
frame.getContentPane().add(textPane);
frame.setVisible(true);
}
}
我想设置为JTextArea的情况下选定的文本加粗字体样式。
对于JTextArea
,您不能这样做。您需要使用JTextPane
。
然后您可以使用StyledEditorKit
提供的默认Action
。创建JButton
或JMenuItem
做到这一点:
JButton boldButton = new JButton(new StyledEditorKit.BoldAction());
JMenuItem boldMenuItem = new JMenuItem(new StyledEditorKit.BoldAction());
添加按钮或菜单项的框架。然后,用户可以点击按钮/菜单项,以便在文字被选中后加粗文字。这是大多数编辑工作的方式。您也可以添加一个加速到动作的操作,只需使用键盘即可调用。
阅读有关Text Component Features的Swing教程的部分以获取更多信息和工作示例。
介绍
的(有用的)答案怎么做你想做的事已经发表@Freek德布鲁因和@Gilbert勒布朗是什么,但他们没有解释为什么你在做什么试图做不起作用。这不是一个答案
我该怎么做?
但
的解释,但它不工作。
编辑: @camickr发布了我认为是正确的方法。
回答
从教程的约JTextArea
:
您可以通过多种方式自定义文本区域。例如,虽然给定的文本区域只能以一种字体和颜色显示文本,但您可以设置它使用的字体和颜色。
(引号中所有的重点是我的)和
如果你想要的文字区域中使用多种字体或其他样式来显示其文本,你应该使用编辑器窗格或文本窗格。
这是因为JTextArea
使用PlainDocument
(见this):
PlainDocument
提供了一个基本的容器,其中所有文本被显示在相同的字体文本。
然而,JTextPane
使用DefaultStyledDocument
:
在没有特定格式样式的文本的容器。
'如何做你想做的(有用的)答案已经被张贴......'我会不同意这一点。那些答案重新发明了轮子。 'StyledEditorKit'已经提供了这个功能。所有你需要做的就是使用BoldAction。 – camickr
@camickr我没有说他们是正确的答案。他们只是展示了一种做OP的方式,在这个意义上他们是有用的。我试着仔细选择我的话:) – user1803551
@camickr编辑我的回答,并为其+1了。 – user1803551
检查此链接:http://stackoverflow.com/questions/9141449/styling-text-in-a-jtextarea-or-jtextpane –
我要加粗选定的文本及其上的所有文本 – Ehsan
的影响的'textArea.getSelectedText()'方法返回一个字符串,所以我无法调用'textArea.getSelectedText()。setFont [...])''。 –