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

来源:互联网 发布:淘宝网假冒盗版商品 编辑:程序博客网 时间:2024/04/28 05:38

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(
8888)); // 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(600400);
   
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() + " ", 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(000));
   }
 else if (temp_color.equals("红色")) {
    att.setColor(
new Color(25500));
   }
 else if (temp_color.equals("蓝色")) {
    att.setColor(
new Color(00255));
   }
 else if (temp_color.equals("黄色")) {
    att.setColor(
new Color(2552550));
   }
 else if (temp_color.equals("绿色")) {
    att.setColor(
new Color(02550));
   }

   String temp_backColor 
= (String) fontBackColor.getSelectedItem();
   
if (!temp_backColor.equals("无色")) {
    
if (temp_backColor.equals("灰色")) {
     att.setBackColor(
new Color(200200200));
    }
 else if (temp_backColor.equals("淡红")) {
     att.setBackColor(
new Color(255200200));
    }
 else if (temp_backColor.equals("淡蓝")) {
     att.setBackColor(
new Color(200200255));
    }
 else if (temp_backColor.equals("淡黄")) {
     att.setBackColor(
new Color(255255200));
    }
 else if (temp_backColor.equals("淡绿")) {
     att.setBackColor(
new Color(200255200));
    }

   }

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

}


}

原创粉丝点击