JTextPane例子,演示为文字设置字体、字号、样式、颜色、背景色和插入图片功能

转载 2008年11月30日 20:17:00

原文:http://blog.csdn.net/mq612/archive/2006/09/20/1254349.aspx

JTextPane的例子,模拟聊天客户端,演示了为每段文字设置字体、字号、样式、颜色、背景色和插入图片功能

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;

import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.JTextPane;
import javax.swing.UIManager;
import javax.swing.text.BadLocationException;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyledDocument;

/**
 * JTextPane的例子,模拟聊天客户端,演示了为每段文字设置字体、字号、样式、颜色、背景色和插入图片功能
 * @author 五斗米 <如转载请保留作者和出处>
 * @blog http://blog.csdn.net/mq612
 */

public class Test extends JFrame {

 private static final long serialVersionUID = -2397593626990759111L;

 private JScrollPane scrollPane = null; // 滚动

 private JTextPane text = null; // 不用说了,如果不认识的话就没必要往后看了

 private Box box = null; // 放输入组件的容器

 private JButton b_insert = null, b_remove = null, b_icon = null; // 插入按钮;清除按钮;插入图片按钮

 private JTextField addText = null; // 文字输入框

 private JComboBox fontName = null, fontSize = null, fontStyle = null, fontColor = null,
   fontBackColor = null; // 字体名称;字号大小;文字样式;文字颜色;文字背景颜色

 private StyledDocument doc = null; // 非常重要插入文字样式就靠它了

 public Test() {
  super("JTextPane Test");
  try { // 使用Windows的界面风格
   UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
  } catch (Exception e) {
   e.printStackTrace();
  }
  text = new JTextPane();
  text.setEditable(false); // 不可录入
  doc = text.getStyledDocument(); // 获得JTextPane的Document
  scrollPane = new JScrollPane(text);
  addText = new JTextField(18);
  String[] str_name = { "宋体", "黑体", "Dialog", "Gulim" };
  String[] str_Size = { "12", "14", "18", "22", "30", "40" };
  String[] str_Style = { "常规", "斜体", "粗体", "粗斜体" };
  String[] str_Color = { "黑色", "红色", "蓝色", "黄色", "绿色" };
  String[] str_BackColor = { "无色", "灰色", "淡红", "淡蓝", "淡黄", "淡绿" };
  fontName = new JComboBox(str_name); // 字体名称
  fontSize = new JComboBox(str_Size); // 字号
  fontStyle = new JComboBox(str_Style); // 样式
  fontColor = new JComboBox(str_Color); // 颜色
  fontBackColor = new JComboBox(str_BackColor); // 背景颜色
  b_insert = new JButton("插入"); // 插入
  b_remove = new JButton("清空"); // 清除
  b_icon = new JButton("图片"); // 插入图片
  b_insert.addActionListener(new ActionListener() { // 插入文字的事件
     public void actionPerformed(ActionEvent e) {
      insert(getFontAttrib());
      addText.setText("");
     }
    });
  b_remove.addActionListener(new ActionListener() { // 清除事件
     public void actionPerformed(ActionEvent e) {
      text.setText("");
     }
    });
  b_icon.addActionListener(new ActionListener() { // 插入图片事件
     public void actionPerformed(ActionEvent arg0) {
      JFileChooser f = new JFileChooser(); // 查找文件
      f.showOpenDialog(null);
      insertIcon(f.getSelectedFile()); // 插入图片
     }
    });
  box = Box.createVerticalBox(); // 竖结构
  Box box_1 = Box.createHorizontalBox(); // 横结构
  Box box_2 = Box.createHorizontalBox(); // 横结构
  box.add(box_1);
  box.add(Box.createVerticalStrut(8)); // 两行的间距
  box.add(box_2);
  box.setBorder(BorderFactory.createEmptyBorder(8, 8, 8, 8)); // 8个的边距
  // 开始将所需组件加入容器
  box_1.add(new JLabel("字体:")); // 加入标签
  box_1.add(fontName); // 加入组件
  box_1.add(Box.createHorizontalStrut(8)); // 间距
  box_1.add(new JLabel("样式:"));
  box_1.add(fontStyle);
  box_1.add(Box.createHorizontalStrut(8));
  box_1.add(new JLabel("字号:"));
  box_1.add(fontSize);
  box_1.add(Box.createHorizontalStrut(8));
  box_1.add(new JLabel("颜色:"));
  box_1.add(fontColor);
  box_1.add(Box.createHorizontalStrut(8));
  box_1.add(new JLabel("背景:"));
  box_1.add(fontBackColor);
  box_1.add(Box.createHorizontalStrut(8));
  box_1.add(b_icon);
  box_2.add(addText);
  box_2.add(Box.createHorizontalStrut(8));
  box_2.add(b_insert);
  box_2.add(Box.createHorizontalStrut(8));
  box_2.add(b_remove);
  this.getRootPane().setDefaultButton(b_insert); // 默认回车按钮
  this.getContentPane().add(scrollPane);
  this.getContentPane().add(box, BorderLayout.SOUTH);
  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  this.setSize(600, 400);
  this.setLocationRelativeTo(null);
  this.setVisible(true);
  addText.requestFocus();
 }

 /**
  * 插入图片
  * 
  * @param icon
  */
 private void insertIcon(File file) {
  text.setCaretPosition(doc.getLength()); // 设置插入位置
  text.insertIcon(new ImageIcon(file.getPath())); // 插入图片
  insert(new FontAttrib()); // 这样做可以换行
 }

 /**
  * 将文本插入JTextPane
  * 
  * @param attrib
  */
 private void insert(FontAttrib attrib) {
  try { // 插入文本
   doc.insertString(doc.getLength(), attrib.getText() + "/n", attrib.getAttrSet());
  } catch (BadLocationException e) {
   e.printStackTrace();
  }
 }

 /**
  * 获取所需要的文字设置
  * 
  * @return FontAttrib
  */
 private FontAttrib getFontAttrib() {
  FontAttrib att = new FontAttrib();
  att.setText(addText.getText());
  att.setName((String) fontName.getSelectedItem());
  att.setSize(Integer.parseInt((String) fontSize.getSelectedItem()));
  String temp_style = (String) fontStyle.getSelectedItem();
  if (temp_style.equals("常规")) {
   att.setStyle(FontAttrib.GENERAL);
  } else if (temp_style.equals("粗体")) {
   att.setStyle(FontAttrib.BOLD);
  } else if (temp_style.equals("斜体")) {
   att.setStyle(FontAttrib.ITALIC);
  } else if (temp_style.equals("粗斜体")) {
   att.setStyle(FontAttrib.BOLD_ITALIC);
  }
  String temp_color = (String) fontColor.getSelectedItem();
  if (temp_color.equals("黑色")) {
   att.setColor(new Color(0, 0, 0));
  } else if (temp_color.equals("红色")) {
   att.setColor(new Color(255, 0, 0));
  } else if (temp_color.equals("蓝色")) {
   att.setColor(new Color(0, 0, 255));
  } else if (temp_color.equals("黄色")) {
   att.setColor(new Color(255, 255, 0));
  } else if (temp_color.equals("绿色")) {
   att.setColor(new Color(0, 255, 0));
  }
  String temp_backColor = (String) fontBackColor.getSelectedItem();
  if (!temp_backColor.equals("无色")) {
   if (temp_backColor.equals("灰色")) {
    att.setBackColor(new Color(200, 200, 200));
   } else if (temp_backColor.equals("淡红")) {
    att.setBackColor(new Color(255, 200, 200));
   } else if (temp_backColor.equals("淡蓝")) {
    att.setBackColor(new Color(200, 200, 255));
   } else if (temp_backColor.equals("淡黄")) {
    att.setBackColor(new Color(255, 255, 200));
   } else if (temp_backColor.equals("淡绿")) {
    att.setBackColor(new Color(200, 255, 200));
   }
  }
  return att;
 }

 public static void main(String args[]) {
  new Test();
 }

 /**
  * 字体的属性类
  */
 private class FontAttrib {
  public static final int GENERAL = 0; // 常规

  public static final int BOLD = 1; // 粗体

  public static final int ITALIC = 2; // 斜体

  public static final int BOLD_ITALIC = 3; // 粗斜体

  private SimpleAttributeSet attrSet = null; // 属性集

  private String text = null, name = null; // 要输入的文本和字体名称

  private int style = 0, size = 0; // 样式和字号

  private Color color = null, backColor = null; // 文字颜色和背景颜色

  /**
   * 一个空的构造(可当做换行使用)
   */
  public FontAttrib() {
  }

  /**
   * 返回属性集
   * 
   * @return
   */
  public SimpleAttributeSet getAttrSet() {
   attrSet = new SimpleAttributeSet();
   if (name != null)
    StyleConstants.setFontFamily(attrSet, name);
   if (style == FontAttrib.GENERAL) {
    StyleConstants.setBold(attrSet, false);
    StyleConstants.setItalic(attrSet, false);
   } else if (style == FontAttrib.BOLD) {
    StyleConstants.setBold(attrSet, true);
    StyleConstants.setItalic(attrSet, false);
   } else if (style == FontAttrib.ITALIC) {
    StyleConstants.setBold(attrSet, false);
    StyleConstants.setItalic(attrSet, true);
   } else if (style == FontAttrib.BOLD_ITALIC) {
    StyleConstants.setBold(attrSet, true);
    StyleConstants.setItalic(attrSet, true);
   }
   StyleConstants.setFontSize(attrSet, size);
   if (color != null)
    StyleConstants.setForeground(attrSet, color);
   if (backColor != null)
    StyleConstants.setBackground(attrSet, backColor);
   return attrSet;
  }

  /**
   * 设置属性集
   * 
   * @param attrSet
   */
  public void setAttrSet(SimpleAttributeSet attrSet) {
   this.attrSet = attrSet;
  }

  /* 后面的注释就不写了,一看就明白 */

  public String getText() {
   return text;
  }

  public void setText(String text) {
   this.text = text;
  }

  public Color getColor() {
   return color;
  }

  public void setColor(Color color) {
   this.color = color;
  }

  public Color getBackColor() {
   return backColor;
  }

  public void setBackColor(Color backColor) {
   this.backColor = backColor;
  }

  public String getName() {
   return name;
  }

  public void setName(String name) {
   this.name = name;
  }

  public int getSize() {
   return size;
  }

  public void setSize(int size) {
   this.size = size;
  }

  public int getStyle() {
   return style;
  }

  public void setStyle(int style) {
   this.style = style;
  }
 }

}

 

Create Your Own Visual Basic Add-Ins

Create Your Own Visual Basic Add-InsBy S.S. AhmedRating: 3.7 out of 5Rate this article docume...
  • sonicdater
  • sonicdater
  • 2002-03-09 18:00:00
  • 928

使用JTextPane代替JTextArea实现每一行的字的颜色不一样

import java.awt.BorderLayout; import java.awt.Color; import javax.swing.JFrame; import javax.sw...
  • ycb1689
  • ycb1689
  • 2012-07-12 09:44:40
  • 4270

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

下面是一个应用的例子源码:HTMLDocumentEditor import java.awt.BorderLayout; import java.awt.Color; import java.aw...
  • ycb1689
  • ycb1689
  • 2013-02-18 17:09:24
  • 3471

JTextPane例子,演示为文字设置字体、字号、样式、颜色、背景色和插入图片功能

JTextPane的例子,模拟聊天客户端,演示了为每段文字设置字体、字号、样式、颜色、背景色和插入图片功能   import java.awt.BorderLayout; import ja...
  • ycb1689
  • ycb1689
  • 2012-12-19 09:23:03
  • 1566

关于JTextPane的用法-插入不同的字体

[Java]关于JTextPane的用法-插入不同的字体-浅谈MVC //  我搜了很多文档,发现没有关于JTextPane的用法。// 在很痛苦的挣扎中慢慢会了JTextPane的用法,同时也对Ja...
  • legendmoheNote
  • legendmoheNote
  • 2010-07-23 22:34:00
  • 2559

一个完整的javaSwing的JTextPane 插入图片和文字

一个完整的javaSwing的JTextPane 插入图片和文字: package gui; import java.awt.BorderLayout; import java.awt.Color...
  • zhuiqiuzhuoyue583
  • zhuiqiuzhuoyue583
  • 2018-01-12 19:26:34
  • 183

CSDN-markdown 文字样式设置(字体, 大小, 颜色, 高亮底色)

本文介绍与文字格式的相关设置语法,包括字体、大小、颜色和高亮背景色。并且介绍了表格中格子背景色的设置。...
  • thither_shore
  • thither_shore
  • 2016-08-11 12:14:23
  • 7526

markdown编辑器语法——文字颜色、大小、字体与背景色的设置

CSDN的markdown编辑器是其衍生版本,扩展了Markdown的功能(如表格、脚注、内嵌HTML等等)就是内嵌HTML,接下来要讲的功能就需要使用内嵌HTML的方法来实现。一、颜色浅红色文字:浅...
  • manjianchao
  • manjianchao
  • 2016-12-15 11:42:53
  • 4975

QCheckBox 改变字体颜色

//改变字体颜色 ui.checkBox->setStyleSheet("QCheckBox{color:rgb(105,170,238)}"); //设定前景颜色,就是字体颜色...
  • lcalqf
  • lcalqf
  • 2016-03-30 09:23:52
  • 1602

Markdown使用技巧总结——字体,颜色,字号,背景,首行缩进等

Markdown 常用技巧: 2015/12/19 16:05:18 换行: 方法1: 连续两个以上空格+回车 方法2:使用html语言换行标签: 首行缩进两个字符:(每个表示一个空格,连续使用...
  • u010177286
  • u010177286
  • 2015-12-19 16:12:14
  • 23020
收藏助手
不良信息举报
您举报文章: JTextPane例子,演示为文字设置字体、字号、样式、颜色、背景色和插入图片功能
举报原因:
原因补充:

(最多只允许输入30个字)