2013-05-09 77 views
0

我真的需要你的幫助,因爲我現在試圖用一種方法來使用各種方法來做某些事情......不成功。在JEditorPane中編輯html內容

我有一個JTextPane包含圖像等的HTML文本,這完美的作品。

現在,我的ID爲< span> </span>元素,我想刪除它的內容並插入一個組件。

更具體,我有:<跨度ID = '123'> < IMG SRC = 'URL /英揚留學'/> </SPAN> ,我想有<跨度ID = '123'># JLabel的</SPAN>

我懂得:

  • 得到span元素:htmlDoc.getElement( 「123」);
  • 在JTextPane的插入位置插入一個JLabel:jtp.insertComponent(component);

我不知道我怎麼能:

  • 刪除< IMG />
  • 在適當位置插入我的組件。

謝謝你的幫忙!

回答

1

你知道如何讓span元素,所以也許下面的工作:

  1. Element類有一個可以用來插入JLabel的getStartOffset()方法。

  2. 看看HTMLDocument類。有一個刪除(Element)方法。

+0

我沒有找到remove(Element)方法。你確定要談論類javax.swing.text.html.HTMLDocument嗎? 無論如何,多虧了你,我發現setInnerHTML和setOuterHTML解決了移除img元素的問題。 關於插入,您的解決方案完美工作。 非常感謝您的回答! (順便說一下,在跨度內的img的情況下,HTMLDocument.getElement(id)方法有一個非常奇怪的行爲。span元素被完全忽略...) – Sharcoux 2013-05-12 08:28:29

+0

HTMLDocument從另一個類繼承此方法。 – camickr 2013-05-13 05:36:30

0

你可以使用正則表達式來做到這一點。這裏是一個讓你想要什麼的例子,但不處理空格:

<img src='.+?'(/>|></img>) 

在您的例子,如果你忽略空格,這將是這樣的:

String html = "< span id='123' ><img src='url/123.png'/></span>"; 
String newValue = html.replaceFirst("<img src='.+?'(/>|></img>)", "myJLabel"); 

要使其工作與空格,只需添加\s*無論他們可以出現。下面是一個讓雙方<img< img

<\\s*img src='.+?'(/>|></img>) 

現在一個例子,使其工作,因爲你需要,只要把別人\s*,你認爲這是必要的

要了解更多關於正則表達式,讀this

+0

好的。如果我不清楚,我的錯。 只是爲了使html顯示在我的消息。否則,您的瀏覽器會將其解釋爲 「replaceFirst」請求「String,String」作爲參數。 myJLabel當然是JLabel。我不認爲我可以使用你的解決方案。 – Sharcoux 2013-05-12 03:34:18

0

你爲什麼要爲TextPane添加一個jlabel?無論如何,由於HTML是一種XML方言,因此您可以使用XML解析器來組織標籤並更改內容和屬性。

所以你可以通過簡單地調用的setText更新您的文本窗格中的內容()

+0

實際上,其中一個原因是我使用JEuclide來表示mathML表達式。 JEuclide使用我必須插入到文本窗格中的JMathComponent來表示它。 我的問題是,我不能將組件添加到HTML。我必須將它添加到textPane。通過您的解決方案,我應該如何以及何時添加它? – Sharcoux 2013-05-12 03:27:27