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

mac2022-06-30  27

http://blog.csdn.net/mq612/article/details/1254349

 

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

转载于:https://www.cnblogs.com/cuizhf/archive/2011/09/20/2182144.html

最新回复(0)