Swing


          天行健 君子以自強不息

          posts - 69, comments - 215, trackbacks - 0, articles - 16
             :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          Swing對JTextPane中字體顏色的設置

          Posted on 2007-07-09 08:50 zht 閱讀(10543) 評論(4)  編輯  收藏 所屬分類: Swing
          import java.awt.BorderLayout;
          import java.awt.Color;
          import java.awt.event.ActionEvent;
          import java.awt.event.ActionListener;

          import javax.swing.JButton;
          import javax.swing.JEditorPane;
          import javax.swing.JPanel;
          import javax.swing.JScrollPane;
          import javax.swing.JTextPane;
          import javax.swing.UIManager;
          import javax.swing.WindowConstants;
          import javax.swing.text.AttributeSet;
          import javax.swing.text.DefaultStyledDocument;
          import javax.swing.text.Document;
          import javax.swing.text.EditorKit;
          import javax.swing.text.MutableAttributeSet;
          import javax.swing.text.SimpleAttributeSet;
          import javax.swing.text.StyleConstants;
          import javax.swing.text.StyledDocument;
          import javax.swing.text.StyledEditorKit;

          public class NewJFrame extends javax.swing.JFrame implements ActionListener {
           private JPanel jp1;

           private JButton color;

           private JTextPane jep;

           private JScrollPane jsp;

           private JButton font;

           /**
            * Auto-generated main method to display this JFrame
            */
           public static void main(String[] args) {
            NewJFrame inst = new NewJFrame();
            inst.setVisible(true);
           }

           public NewJFrame() {
            super();
            initGUI();
           }

           private void initGUI() {
            try {
             BorderLayout thisLayout = new BorderLayout();
             getContentPane().setLayout(thisLayout);
             setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
             {
              jp1 = new JPanel();
              getContentPane().add(jp1, BorderLayout.NORTH);
              {
               font = new JButton();
               font.addActionListener(this);
               jp1.add(font);
               font.setText("font");
              }
              {
               color = new JButton();
               jp1.add(color);
               color.addActionListener(this);
               color.setText("color");
              }
             }
             {
              jsp = new JScrollPane();
              getContentPane().add(jsp, BorderLayout.CENTER);
              {
               jep = new JTextPane();
               jsp.setViewportView(jep);
               jep.setDocument(new DefaultStyledDocument());
              }
             }
             pack();
             setSize(400, 300);
            } catch (Exception e) {
             e.printStackTrace();
            }
           }

           public static void setFontSize(JEditorPane editor, int size) {
            if (editor != null) {
             if ((size > 0) && (size < 512)) {
              MutableAttributeSet attr = new SimpleAttributeSet();
              StyleConstants.setFontSize(attr, size);
              setCharacterAttributes(editor, attr, false);
             } else {
              UIManager.getLookAndFeel().provideErrorFeedback(editor);
             }
            }
           }

           public static void setForeground(JEditorPane editor, Color fg) {
            if (editor != null) {
             if (fg != null) {
              MutableAttributeSet attr = new SimpleAttributeSet();
              StyleConstants.setForeground(attr, fg);
              setCharacterAttributes(editor, attr, false);
             } else {
              UIManager.getLookAndFeel().provideErrorFeedback(editor);
             }
            }
           }

           public static final void setCharacterAttributes(JEditorPane editor,
             AttributeSet attr, boolean replace) {
            int p0 = editor.getSelectionStart();
            int p1 = editor.getSelectionEnd();
            if (p0 != p1) {
             StyledDocument doc = getStyledDocument(editor);
             doc.setCharacterAttributes(p0, p1 - p0, attr, replace);
            }
            StyledEditorKit k = getStyledEditorKit(editor);
            MutableAttributeSet inputAttributes = k.getInputAttributes();
            if (replace) {
             inputAttributes.removeAttributes(inputAttributes);
            }
            inputAttributes.addAttributes(attr);
           }

           protected static final StyledDocument getStyledDocument(JEditorPane e) {
            Document d = e.getDocument();
            if (d instanceof StyledDocument) {
             return (StyledDocument) d;
            }
            throw new IllegalArgumentException("document must be StyledDocument");
           }

           protected static final StyledEditorKit getStyledEditorKit(JEditorPane e) {
            EditorKit k = e.getEditorKit();
            if (k instanceof StyledEditorKit) {
             return (StyledEditorKit) k;
            }
            throw new IllegalArgumentException("EditorKit must be StyledEditorKit");
           }

           public void actionPerformed(ActionEvent e) {
            Object obj = e.getSource();
            if (obj == font) {
             JEditorPane editor = jep;
             setFontSize(editor, 20);
            }
            if (obj == color) {
             JEditorPane editor = jep;
             setForeground(editor, Color.red);
            }
           }

          }
          其他操作如下:
          1、對字體的操作
          MutableAttributeSet attr = new SimpleAttributeSet();
              StyleConstants.setFontFamily(attr, family);
              setCharacterAttributes(editor, attr, false);
          family為字體
          2、對字體大小的操作
          MutableAttributeSet attr = new SimpleAttributeSet();
              StyleConstants.setFontSize(attr, size);
              setCharacterAttributes(editor, attr, false);
          size為字號
          3、是否是粗體的操作
          StyledEditorKit kit = getStyledEditorKit(editor);
             MutableAttributeSet attr = kit.getInputAttributes();
             boolean bold = (StyleConstants.isBold(attr)) ? false : true;
             SimpleAttributeSet sas = new SimpleAttributeSet();
             StyleConstants.setBold(sas, bold);
             setCharacterAttributes(editor, sas, false);
          4、是否是斜體的操作
          StyledEditorKit kit = getStyledEditorKit(editor);
             MutableAttributeSet attr = kit.getInputAttributes();
             boolean italic = (StyleConstants.isItalic(attr)) ? false : true;
             SimpleAttributeSet sas = new SimpleAttributeSet();
             StyleConstants.setItalic(sas, italic);
             setCharacterAttributes(editor, sas, false);
          5、是否有下劃線的操作
          StyledEditorKit kit = getStyledEditorKit(editor);
             MutableAttributeSet attr = kit.getInputAttributes();
             boolean underline = (StyleConstants.isUnderline(attr)) ? false
               : true;
             SimpleAttributeSet sas = new SimpleAttributeSet();
             StyleConstants.setUnderline(sas, underline);
             setCharacterAttributes(editor, sas, false);
          6、左中右對齊的處理
          MutableAttributeSet attr = new SimpleAttributeSet();
             StyleConstants.setAlignment(attr, a);
             setParagraphAttributes(editor, attr, false);
          public static final void setParagraphAttributes(JEditorPane editor,
             AttributeSet attr, boolean replace) {
            int p0 = editor.getSelectionStart();
            int p1 = editor.getSelectionEnd();
            StyledDocument doc = getStyledDocument(editor);
            doc.setParagraphAttributes(p0, p1 - p0, attr, replace);
           }
          a:0:左,1:中,2:右

          7、文本字體顏色的設置
          MutableAttributeSet attr = new SimpleAttributeSet();
              StyleConstants.setForeground(attr, fg);
              setCharacterAttributes(editor, attr, false);
          fg:為color
          8、文本背景顏色的設置
          MutableAttributeSet attr = new SimpleAttributeSet();
              StyleConstants.setBackground(attr, bg);
              setCharacterAttributes(editor, attr, false);
          主站蜘蛛池模板: 宁武县| 清新县| 称多县| 襄汾县| 德令哈市| 洪雅县| 卢龙县| 昆明市| 报价| 武平县| 汕尾市| 武穴市| 东莞市| 大名县| 吉隆县| 和静县| 阿尔山市| 鹿泉市| 乡城县| 洛隆县| 宜章县| 怀远县| 稷山县| 丹棱县| 西丰县| 剑河县| 高密市| 库尔勒市| 丹凤县| 沭阳县| 萨嘎县| 洪洞县| 兴国县| 石阡县| 彩票| 武安市| 二连浩特市| 康定县| 江安县| 永德县| 贺州市|