• 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() + "/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(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;
      }
     }

    }
  • 相关阅读:
    [YTU]_2436( C++ 习题 输出日期时间--友元类)
    [YTU]_2435 ( C++ 习题 输出日期时间--友元函数)
    病毒侵袭
    石子合并(区间DP经典例题)
    AC自动机模板2
    【模板】最近公共祖先(LCA)
    华华给月月出题
    线性筛素数
    华华开始学信息学
    华华和月月种树
  • 原文地址:https://www.cnblogs.com/cuizhf/p/2182144.html
Copyright © 2020-2023  润新知