`

Swing对JTextPane中字体颜色的设置

    博客分类:
  • JAVA
阅读更多
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.UIManager;
import javax.swing.WindowConstants;
import javax.swing.text.AttributeSet;
import javax.swing.text.DefaultStyledDocument;
import javax.swing.text.Document;
import javax.swing.text.EditorKit;
import javax.swing.text.MutableAttributeSet;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyledDocument;
import javax.swing.text.StyledEditorKit;

public class NewJFrame extends javax.swing.JFrame implements ActionListener {
 private JPanel jp1;

 private JButton color;

 private JTextPane jep;

 private JScrollPane jsp;

 private JButton font;

 /**
  * Auto-generated main method to display this JFrame
  */
 public static void main(String[] args) {
  NewJFrame inst = new NewJFrame();
  inst.setVisible(true);
 }

 public NewJFrame() {
  super();
  initGUI();
 }

 private void initGUI() {
  try {
   BorderLayout thisLayout = new BorderLayout();
   getContentPane().setLayout(thisLayout);
   setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
   {
    jp1 = new JPanel();
    getContentPane().add(jp1, BorderLayout.NORTH);
    {
     font = new JButton();
     font.addActionListener(this);
     jp1.add(font);
     font.setText("font");
    }
    {
     color = new JButton();
     jp1.add(color);
     color.addActionListener(this);
     color.setText("color");
    }
   }
   {
    jsp = new JScrollPane();
    getContentPane().add(jsp, BorderLayout.CENTER);
    {
     jep = new JTextPane();
     jsp.setViewportView(jep);
     jep.setDocument(new DefaultStyledDocument());
    }
   }
   pack();
   setSize(400, 300);
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

 public static void setFontSize(JEditorPane editor, int size) {
  if (editor != null) {
   if ((size > 0) && (size < 512)) {
    MutableAttributeSet attr = new SimpleAttributeSet();
    StyleConstants.setFontSize(attr, size);
    setCharacterAttributes(editor, attr, false);
   } else {
    UIManager.getLookAndFeel().provideErrorFeedback(editor);
   }
  }
 }

 public static void setForeground(JEditorPane editor, Color fg) {
  if (editor != null) {
   if (fg != null) {
    MutableAttributeSet attr = new SimpleAttributeSet();
    StyleConstants.setForeground(attr, fg);
    setCharacterAttributes(editor, attr, false);
   } else {
    UIManager.getLookAndFeel().provideErrorFeedback(editor);
   }
  }
 }

 public static final void setCharacterAttributes(JEditorPane editor,
   AttributeSet attr, boolean replace) {
  int p0 = editor.getSelectionStart();
  int p1 = editor.getSelectionEnd();
  if (p0 != p1) {
   StyledDocument doc = getStyledDocument(editor);
   doc.setCharacterAttributes(p0, p1 - p0, attr, replace);
  }
  StyledEditorKit k = getStyledEditorKit(editor);
  MutableAttributeSet inputAttributes = k.getInputAttributes();
  if (replace) {
   inputAttributes.removeAttributes(inputAttributes);
  }
  inputAttributes.addAttributes(attr);
 }

 protected static final StyledDocument getStyledDocument(JEditorPane e) {
  Document d = e.getDocument();
  if (d instanceof StyledDocument) {
   return (StyledDocument) d;
  }
  throw new IllegalArgumentException("document must be StyledDocument");
 }

 protected static final StyledEditorKit getStyledEditorKit(JEditorPane e) {
  EditorKit k = e.getEditorKit();
  if (k instanceof StyledEditorKit) {
   return (StyledEditorKit) k;
  }
  throw new IllegalArgumentException("EditorKit must be StyledEditorKit");
 }

 public void actionPerformed(ActionEvent e) {
  Object obj = e.getSource();
  if (obj == font) {
   JEditorPane editor = jep;
   setFontSize(editor, 20);
  }
  if (obj == color) {
   JEditorPane editor = jep;
   setForeground(editor, Color.red);
  }
 }

}
其他操作如下:
1、对字体的操作
MutableAttributeSet attr = new SimpleAttributeSet();
    StyleConstants.setFontFamily(attr, family);
    setCharacterAttributes(editor, attr, false);
family为字体
2、对字体大小的操作
MutableAttributeSet attr = new SimpleAttributeSet();
    StyleConstants.setFontSize(attr, size);
    setCharacterAttributes(editor, attr, false);
size为字号
3、是否是粗体的操作
StyledEditorKit kit = getStyledEditorKit(editor);
   MutableAttributeSet attr = kit.getInputAttributes();
   boolean bold = (StyleConstants.isBold(attr)) ? false : true;
   SimpleAttributeSet sas = new SimpleAttributeSet();
   StyleConstants.setBold(sas, bold);
   setCharacterAttributes(editor, sas, false);
4、是否是斜体的操作
StyledEditorKit kit = getStyledEditorKit(editor);
   MutableAttributeSet attr = kit.getInputAttributes();
   boolean italic = (StyleConstants.isItalic(attr)) ? false : true;
   SimpleAttributeSet sas = new SimpleAttributeSet();
   StyleConstants.setItalic(sas, italic);
   setCharacterAttributes(editor, sas, false);
5、是否有下划线的操作
StyledEditorKit kit = getStyledEditorKit(editor);
   MutableAttributeSet attr = kit.getInputAttributes();
   boolean underline = (StyleConstants.isUnderline(attr)) ? false
     : true;
   SimpleAttributeSet sas = new SimpleAttributeSet();
   StyleConstants.setUnderline(sas, underline);
   setCharacterAttributes(editor, sas, false);
6、左中右对齐的处理
MutableAttributeSet attr = new SimpleAttributeSet();
   StyleConstants.setAlignment(attr, a);
   setParagraphAttributes(editor, attr, false);
public static final void setParagraphAttributes(JEditorPane editor,
   AttributeSet attr, boolean replace) {
  int p0 = editor.getSelectionStart();
  int p1 = editor.getSelectionEnd();
  StyledDocument doc = getStyledDocument(editor);
  doc.setParagraphAttributes(p0, p1 - p0, attr, replace);
 }
a:0:左,1:中,2:右

7、文本字体颜色的设置
MutableAttributeSet attr = new SimpleAttributeSet();
    StyleConstants.setForeground(attr, fg);
    setCharacterAttributes(editor, attr, false);
fg:为color
8、文本背景颜色的设置
MutableAttributeSet attr = new SimpleAttributeSet();
    StyleConstants.setBackground(attr, bg);
    setCharacterAttributes(editor, attr, false);
分享到:
评论

相关推荐

    JTextPane 关键字变色

    在给定的标题“JTextPane 关键字变色”和描述“SWT JTextPane 可以把控件中需要的字符串的颜色修改成自己想要的颜色”中,我们关注的主要知识点是`JTextPane`如何实现特定关键字的高亮显示,也就是改变颜色。...

    JAVA-----JTextPane实例

    在Java Swing库中,`JTextPane`是一个功能强大的文本组件,它允许显示和编辑富文本格式,包括字体、颜色和排版等特性。本文将深入探讨`JTextPane`的基本概念、功能以及如何在Java应用程序中使用它。 #### 一、`...

    关于JTextPane中进行搜索结果显示的问题及解决

    在Java Swing库中,`JTextPane`是一个用于显示和编辑富文本的组件,它可以处理包含格式化文本、图片和嵌入对象的文档。在处理大量文本时,我们经常需要实现搜索功能,以便用户能够快速查找特定的关键词或短语。然而...

    JAVA文本域显示不同字体颜色的文字

    在Java编程中,实现文本域显示不同颜色的文字主要涉及到Swing库中的JTextPane组件。JTextPane是一个可编辑的文本组件,支持富文本格式,能够处理不同的样式,包括字体、颜色等。以下是对这个主题的详细解释: 1. **...

    java写的记事本程序带工具栏可以改变字体颜色

    JTextPane是Swing的一部分,它可以处理复杂的文本格式,包括插入图片、设置文本样式(如字体、大小、颜色)以及处理超链接。在这个记事本程序中,工具栏按钮的点击事件会触发相应的功能,比如改变字体颜色,可能通过...

    Swing实现编辑器(支持语法高亮)

    1. **选择合适的文本模型**:JTextPane使用 StyledDocument 模型,它可以对文本的不同部分应用不同的样式,如字体、颜色和背景色,这对于语法高亮至关重要。 2. **定义语法样式**:根据支持的编程语言(如Java、...

    JEditorPane/JTextPane常见操作(字体,颜色,字号,加粗,斜线,下划线,保存,行间距 等操作)以及HTML空格处理

    在Java的Swing库中,`JEditorPane`和`JTextPane`是两种非常重要的文本组件,它们允许用户编辑和显示富文本内容,包括不同的字体、颜色、字号、样式等。这两个组件都是`javax.swing.text`包的一部分,提供了丰富的...

    JTextPane--insert-Image.zip_JTextPane

    `JTextPane`相比于基础的`JTextArea`,增加了对富文本的支持,如字体样式、颜色、链接等。在`JTextPane`中插入图片,通常需要使用`SimpleAttributeSet`和`StyledEditorKit`来实现。以下是一些关键步骤: 1. **创建`...

    Swing使用范例.rar

    JTextArea简单一些,而JTextPane支持富文本格式,如字体样式、颜色等。 8. **JMenu和JMenuItem**: 用于创建下拉菜单和菜单项,是构建应用程序菜单栏的关键组件。 9. **JScrollPane**: 当组件的内容无法在可见区域...

    java swing简单版qq

    这可能涉及到设置颜色、字体、边框等各个视觉元素。 除此之外,网络通信是实现即时通讯的核心部分。这个简单的QQ应用可能采用了TCP或UDP协议进行数据传输,通过Socket编程实现客户端与服务器之间的连接。数据交换...

    Java基于Swing实现的简单聊天室,支持多人在线闲谈.zip

    8. **文本格式化**:Swing提供了诸如JEditorPane或JTextPane这样的组件,可以支持富文本格式,如字体、颜色和链接,以增强聊天体验。 9. **错误处理**:在实际项目中,需要考虑异常处理,如网络中断、用户输入错误...

    改变编辑框的背景和字体

    而在桌面应用中,如使用Java Swing、Qt或Windows Forms,我们有专门的组件如JTextArea、QTextEdit或TextBox,可以通过API设置背景色和字体。 **改变背景颜色:** 在HTML/CSS中,可以使用CSS的`background-color`...

    java swing 聊天程序

    5. **字体设置**:Swing 提供了 `JTextPane` 或 `JEditorPane` 组件,它们支持富文本编辑,允许用户更改字体、颜色和大小。通过 `StyledDocument` 和 `SimpleAttributeSet` 可以设置文本属性,实现这些个性化设置。 ...

    控制jEditorPane和jTextPane换行的演示程序

    而`JTextPane`则比`JEditorPane`功能更加强大,它支持复杂的文本格式化,如样式、字体和颜色的变化,以及插入图片和基本的表格。两者都是`javax.swing.text`包下的成员,继承自`JTextComponent`,因此它们共享许多...

    Java Swing 教程

    Swing组件允许开发者通过setFont()方法设置字体,通过setForeground()和setBackground()方法设定文字和背景颜色。还可以使用Color类创建自定义颜色。 4. **事件处理机制**: Java的事件处理机制是基于监听器模式...

    EditorMDI多文档编辑器swing.rar

    5. **基本文本区样式设置**:为了满足不同的编辑需求,`EditorMDI`可能支持设置文本的字体、颜色、大小等样式。这可以通过Swing的文本组件属性(如JTextComponent的setFont、setForeground和setBackground方法)实现...

    MyEditor[swing界面-文本编辑器-功能实现版].rar

    这些组件支持文本插入、删除、剪切、复制和粘贴等基本操作,并可以通过Document对象进行更高级的文本处理,如设置字体、颜色,或者执行复杂的查找和替换操作。 MyEditor 1.4版本可能包含了一些优化和改进,比如性能...

    JAVA文本域插入表情

    在Java编程中,文本域(Text Pane)是Swing组件之一,用于显示和编辑多行文本,它支持富文本格式,比如字体、颜色、样式等。在某些应用场景中,我们可能需要在文本域中插入表情,以增强用户体验或提供更丰富的信息...

Global site tag (gtag.js) - Google Analytics