2013-04-07 36 views
2

我正在研究一個簡單的文字處理器與Java swing和佈局,我想弄清楚如何使文字的粗體,斜體或不同的字體大小,而不是整個文本塊一次更改在我的JTextArea。如何將JTextArea中的選定文本轉換爲字符串?

是否有某種方式來初始化字符串,因爲用戶用鼠標高亮顯示了JTextArea中的文本?我會喜歡它,如果有某種ActionListener或JTextArea的東西,它可以檢測到這一切,並很容易地將任何東西保存爲一個字符串,但我不知道這是否可能。這樣的事情將是巨大的:

String selectedtext; 
JTextArea type; 

class TextPanel extends JPanel implements ActionListener 
{ 
    public TextPanel() 
    { 
     type = new JTextArea(); 
     type.addActionListener(this); 
     this.add(type); 
    } 

    public void actionPerformed(ActionEvent e) 
    { 
     selectedtext = e.getSelected(); 
    } 
} 
+0

我意識到我的回答是更關注你的最終目標,而不是你問的問題,對此感到抱歉。 – 2013-04-07 06:00:06

+0

不要抱歉,甚至在我看到您的評論之前,我實際上已將所有的'JTextArea'切換到'JTextPane's,並且現在我正在學習使用Attributes和Styles。感謝您在答案中給我「JTextPane」的基本信息:D – applemavs 2013-04-07 07:01:59

回答

3

JTextArea中不具有任何內置功能,將做到這一點,但:

爲了讓別人來選擇文本,他們必須單擊文本區域,拖動並釋放點擊。因此,附加的MouseListener和實施方法的mouseReleased如果選擇任何文字來檢查,如果是將其保存爲一個字符串:

public void mouseReleased(MouseEvent e) { 
    if (textArea.getSelectedText() != null) { // See if they selected something 
     String s = textArea.getSelectedText(); 
     // Do work with String s 
    } 
} 
+0

非常感謝,這正是我所需要的! – applemavs 2013-04-07 05:56:45

+0

@applemavs歡迎:) – drewmoore 2013-04-07 07:25:52

-1

JTextArea中不具備這種能力。你應該看看 JEditorPane

它可以顯示HTML,所以你可以使用粗體標籤和你需要什麼..

+0

這不是一個很大的答案,但是這並不能使它失效。我懷疑'JEditorPane'是OP尋找的東西。 – 2013-04-07 05:49:33

+0

@izuriel這個答案可以正確的方式,JTextPane/JEditorPane內置支持OP的HighLighter詢問'如何使各個塊的文本加粗,斜體,或不同的字體大小,而不是整個文本塊',請更多請參閱Oracle教程 – mKorbel 2013-04-07 06:38:26

+0

@izuriel - 問題的作者提到他正在構建一個小型文字處理器的事實。我懷疑操作系統是否需要一個功能類似於gedit或記事本的文字處理器。 – Protostome 2013-04-07 07:20:24

1

你不會是能夠與JTextArea做到這一點,你需要的東西支持豐富的文本顯示,如JTextPanel,您需要爲其定義樣式,將這些樣式應用於特定區域。

Here是創建樣式的實用程序類的示例(鏈接以提供定義樣式的示例)。 addNewStylechangeFont是兩個最重要的參考方法。 addNewStyle方法顯示瞭如何將預定義樣式添加到插入時可以引用的文檔(主要是爲了希望以格式過去時進行粘貼)。 changeFont方法顯示如何創建樣式並將其應用於區域(在區域從0到文檔末尾的方法中 - 即整個文檔)。

您可能需要動態製作這些樣式,因此如果存在(我沒有完成),您需要從區域獲取這些樣式。所有這一切都與StyledDocument

而且例如附加與樣式文本到StyledDocument(純粹爲例)做的是:

styledDocument.insertString(
       styledDocument.getLength(), textToInsert, 
       styledDocument.getStyle(styleName)); 

它已經有一段時間,因爲我跟JTextPane S和StyledDocuments工作這麼其中大部分來自於我所做的工作。我希望我能給你更多的信息,而不僅僅是一個起點。

+0

只與文檔 – mKorbel 2013-04-07 13:01:26

1

用於檢測JTextArea中選擇的變化,它會更好,如果你使用的CaretListener的。現在

jTextArea.addCaretListener(new CaretListener(){ 
    public void caretUpdate(CaretEvent ce) 
    { 
     int dot=ce.getDot(); 
     int mark=ce.getMark(); 

       if(dot!=mark) 
       selectedText=jTextArea.getSelectedText(); 
       else selectedText=null; 
    } 
}); 

,如果你想要做一些操作與所選文本拖動鼠標時,你能做到這一點,因爲selectedText被更新。

相關問題