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