JTextPane的特性:

NO IMAGE

JTextPane的特性:
    相信大家都有用過Word來寫過報告或文章,那麼你一定會知道我們在Word中可以對文章中的文字做很多的變化,這些變化都是
屬於文字的“屬性”變化。由於在JTextPane中產生的效果幾乎都是由屬性的變化而來,所以改變屬性的類元件在JTextpane中是少
不了的。因此在介紹如何構造JTextPane之前,我們要先介紹兩個在JTextPane中常用到屬性類:
   SimpleAttributeSet和StyleConstant.
屬性的變化原本是利用AttributeSet interface來處理的,但是這個interface中包含了太多的方法,若是我們直接實作
AttributeSet interface那就需要實作此interface裡所有的方法,這對編寫程式來說並不是一個很理想的做法;而java另外提供了
SimpleAttributeSet類,實作了AttributeSet interface.因此,只要我們直接使用SimpleAttributeSet類就能具備AttributeSet
interface的所有功能,而不用一個個的編寫AttributeSet中的方法。另外StyleConstant類則是提供AttributeSet類許多常用的屬
性鍵值(Attribute Key)和方法來設定或取得JTextPane內容的狀態。在StyleConstant類中包含了許多的常用的屬性設定,包括本文
與邊界空白區段設定、文字字型/大小/型別設定、背景顏色設定等。利用這兩個類來輔助設計JTextPane便使JTextPane有更豐富
的內容變化。
   JTextPane是專為文字和版面處理設計的元件。JTextPane對可輸入區域內容的設計概念是一個類似Word的設計概念,也就是說在
JTextPane中的文字結構是有段落概念的。“段落”的概念就是以[Enter]鍵為每一段落的分界點,每按一次[Enter]鍵就增加一個段
落。記得我們在JTextArea中提過的Element儲存模式嗎?在JTextPane中也是採用相同的做法,但是差別在於規劃儲存的方式不同。
在JTextArea中並沒有分段落,只是單純的以[Enter]鍵當作儲存成兩個Element的分界。而在JTextPane則是以整個編輯區哉為根節
點,每個段落為枝節點 ,每個字元為葉節點來儲存檔案。也因為JTextPane是採用這樣的方式來儲存資料,因此在JTextPane中也可
以像Word檔案一樣將各個段落設定成不同的屬性,如第一段為斜體字、字型大小為14號字、粗體字,第二段為斜體字、字型顏色為
藍色、向左邊界縮排2釐米等;另外,我們還可以設定JTextPane編輯區內輸入的文字與各個邊界間的距離。由這些功能看來,對於一
個TextComponent來說JTextPane是一個具有相當多實用功能的元件。

9-6-2:構造JTextPane元件:
   在瞭解JTextPane的各項特性之後,我們現在馬上來看JTextPane可以呈現什麼樣的效果,在下面這個例子中我們將對JTextPane
區域內的文字設定顏色、粗斜體、與底線等相關屬性。

 

import javax.swing.*;
import javax.swing.text.*;
import java.awt.event.*;
import java.awt.*;

public class JTextPane1{
private JTextPane textPane;

public JTextPane1(){
  textPane=new JTextPane();
  textPane.setBackground(Color.black);
  textPane.setEditable(false); 
}
public void setYellow_Bold_20(String str){
  SimpleAttributeSet attrset=new SimpleAttributeSet();
  StyleConstants.setForeground(attrset,Color.yellow);
  StyleConstants.setBold(attrset,true);
  insert(str,attrset); 
}
public void setBlue_Italic_Bold_22(String str){
  SimpleAttributeSet attrset=new SimpleAttributeSet();
  StyleConstants.setForeground(attrset,Color.blue);
  StyleConstants.setItalic(attrset,true);
  StyleConstants.setFontSize(attrset,24);
  insert(str,attrset); 
}
public void setRed_UnderLine_Italic_24(String str){
  SimpleAttributeSet attrset=new SimpleAttributeSet();
  StyleConstants.setForeground(attrset,Color.red);
  StyleConstants.setUnderline(attrset,true);
  StyleConstants.setItalic(attrset,true);
  StyleConstants.setFontSize(attrset,24);
  insert(str,attrset); 
}
   //這個方法最主要的用途是將字串插入到JTextPane中。
public void insert(String str,AttributeSet attrset){
  Document docs=textPane.getDocument();//利用getDocument()方法取得JTextPane的Document instance.0
  str=str ” “;
  try{
    docs.insertString(docs.getLength(),str,attrset);     
  }catch(BadLocationException ble){
     System.out.println(“BadLocationException:” ble); 
  } 
}
public Component getComponent(){
  return textPane; 
}
public static void main(String[] args){
  JTextPane1 pane=new JTextPane1();
  pane.setYellow_Bold_20(“This is Line 1,yellow,Bold,Size 20”);
  pane.setBlue_Italic_Bold_22(“This is Line 2,blue,Italic,Bold,Size 22”);
  pane.setRed_UnderLine_Italic_24(“This is Line 3,red,UnderLine,Italic,Size 24”);
  
  JFrame f=new JFrame(“JTextPane1”);
  f.getContentPane().add(pane.getComponent());
  f.setSize(450,180);
          f.show();
          f.addWindowListener(new WindowAdapter(){
          public void windowClosing(WindowEvent e){
            System.exit(0); 
          }
          });
}
}

 

若你想在JTextPane上置入圖形或其他元件(如表格或按鈕),你可以分別使用JTextPane所提供的insetIcon()與insertComponent()
方法來達到這個效果。
  至於另外一種JTextPane的構造方式和JTextArea一樣,差別在於JTextArea是採用Document interface而JTextPane是採用