2014-05-02 63 views

回答

2

Swing文本組件使用Actions來提供文本窗格的各種格式化功能。

以下是StyledEditorKitUnderlineAction的代碼。

public static class UnderlineAction extends StyledTextAction { 

    /** 
    * Constructs a new UnderlineAction. 
    */ 
    public UnderlineAction() { 
     super("font-underline"); 
    } 

    /** 
    * Toggles the Underline attribute. 
    * 
    * @param e the action event 
    */ 
    public void actionPerformed(ActionEvent e) { 
     JEditorPane editor = getEditor(e); 
     if (editor != null) { 
      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); 
     } 
    } 
} 

所以基本上你將需要更換的「下劃線」 StyleConstants方法使用「刪除線」 StyleConstants方法來創建自己的「StrikeThroughAction」。

一旦你創建了一個Action,你就可以通過使用Action創建一個JMenuItem或JButton來使用Action。點擊組件後,直通屬性將被添加到選定的文本中。

+0

非常感謝您的回答!這是我想達到的結果的99%。 正如您在上面給我的代碼註釋所說,操作**切換**下劃線屬性。我想要使​​用它的方式是:選擇一些文本,然後右鍵單擊 - >刪除線。被選中的文本被掃描穿過,我可以繼續輸入普通文本(沒有刪除線)。 –

+0

**編輯:**我忘了提及:我不想將它用作單個動作(使用右鍵單擊菜單選項來切換它),而是以其他方法使用它(在此處執行更多操作)。 –

0

在你右鍵點擊動作

objJTextPane.setContentType("text/html"); 
String[] args = objJTextPane.getText().split(objJTextPane.getSelectedText()); 
objJTextPane.setText("<strike>" + objJTextPane.getSelectedText() + "</strike>"+ args[1].toString()); 

適用你的邏輯在分裂字符串。

+0

我沒有使用html標籤。 –

相關問題