2009-10-11 46 views
2

我正在嘗試創建一個簡單的所見即所得編輯器,它將允許用戶選擇文本並以粗體/下劃線/斜體顯示。目前,用戶可以選擇文本,右鍵單擊它,然後從彈出菜單中,這最終將大膽的風格,像這樣選擇的文本選擇大膽:如何獲取JTextPane中選定文本的樣式?

this.getStyledDocument().setCharacterAttributes(this.getSelectionStart(), this.getSelectionEnd()-this.getSelectionStart(), boldStyle, false); 

大膽的風格設置,如下所示:

boldStyle = this.addStyle("Bold", null); 
StyleConstants.setBold(boldStyle, true); 

我想知道的是,如果它有可能獲得當前所選文本的樣式,因此,如果用戶試圖「大膽」的一些文字,已經是大膽的,我能察覺這一點,編寫代碼以取消粗體顯示此文本,而不是簡單地將粗體樣式應用於該文本?

喜歡的東西:

if(!this.getStyledDocument().getStyleForSelection(this.getSelectionStart(), this.getSelectionEnd()-this.getSelectionStart()).isBold()){ 
//do bold 
} 
else{ 
//un-bold 
} 

將是一個夢想成真,但我不希望這一點。我實際上希望得到的是要麼被告知我做錯了,要麼被顯示爲「方式」,要麼被指向實現這一目標的圓滿方法。

非常感謝您的時間。

回答

4

要做到這一點,最簡單的方法是通過StyledEditorKit

JTextPane text = new JTextPane(); 
JButton button = new JButton("bold"); 
button.addActionListener(new StyledEditorKit.BoldAction()); 

JFrame frame = new JFrame("Styled"); 
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
frame.setLayout(new BorderLayout()); 
frame.add(button, BorderLayout.NORTH); 
frame.add(text, BorderLayout.CENTER); 
frame.setSize(600, 400); 
frame.setVisible(true); 
+0

+1:您可能還想查看StyledEditorKit提供的其他選項。它可能適用於所見即所得編輯器的其他方面 – akf

+0

非常感謝您的這一點。再次,正確的解決方案非常簡單!我從我的彈出式菜單項中刪除了addActionCommand和addActionListener,並使用「bold.addActionListener(new StyledEditorKit.BoldAction());」,它完美地工作。再次感謝! –

2

獲取粗體和斜體從JTextPane中的Selectedtext

int start = jTextpane.getSelectionStart(); 
int end = jTextpane.getSelectionEnd(); 
String selectedText = jTextpane.getSelectedText(); 

應用樣式

StyledDocument doc = (StyledDocument) jTextpane.getDocument(); 
Style logicalStyle = doc.getLogicalStyle(jTextpane.getSelectionStart()); 
Element element = doc.getCharacterElement(start); 
AttributeSet as = element.getAttributes(); 
Checking the Text,which is Bold and Italic 

boolean isBold = StyleConstants.isBold(as) ? false : true; 
boolean isItalic = StyleConstants.isItalic(as); 
System.out.println("selected value is isItalic?"+isItalic); 
System.out.println("selected value is isBold?"+isBold); 
相關問題