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

来源:互联网 发布:mac vmware内部错误 编辑:程序博客网 时间:2024/04/29 04:16

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;  } }}