2010-10-30 28 views
28

Trong mỗi bài viết, câu trả lời cho câu hỏi "Cách nối chuỗi vào một JEditorPane?" được cái gì đó nhưJTextPane chắp thêm một chuỗi mới

jep.setText(jep.getText + "new string"); 

Tôi đã thử này:

jep.setText("<b>Termination time : </b>" + 
         CriterionFunction.estimateIndividual_top(individual) + " </br>"); 
jep.setText(jep.getText() + "Processes' distribution: </br>"); 

Và kết quả là tôi đã "Thời gian kết thúc: 1000" mà không "phân phối Processes':"

Tại sao điều này xảy ra? ??

Trả lời

56

Tôi nghi ngờ đó là phương pháp được khuyến nghị để thêm văn bản. Điều này có nghĩa là mỗi lần bạn thay đổi một số văn bản bạn cần phải xóa toàn bộ tài liệu. Lý do mọi người có thể làm điều này là vì không hiểu cách sử dụng JEditorPane. Điều đó bao gồm tôi.

Tôi thích sử dụng JTextPane hơn và sau đó sử dụng thuộc tính. Một ví dụ đơn giản có thể là một cái gì đó như:

JTextPane textPane = new JTextPane(); 
textPane.setText("original text"); 
StyledDocument doc = textPane.getStyledDocument(); 

// Define a keyword attribute 

SimpleAttributeSet keyWord = new SimpleAttributeSet(); 
StyleConstants.setForeground(keyWord, Color.RED); 
StyleConstants.setBackground(keyWord, Color.YELLOW); 
StyleConstants.setBold(keyWord, true); 

// Add some text 

try 
{ 
    doc.insertString(0, "Start of text\n", null); 
    doc.insertString(doc.getLength(), "\nEnd of text", keyWord); 
} 
catch(Exception e) { System.out.println(e); } 
+0

Cảm ơn bạn, tôi sẽ thử điều này. – Dmitry

+0

Điều đó hoạt động !!! Nhưng tại sao setText + get Text không hoạt động? – Dmitry

+3

Điều đó sẽ tạo lại Tài liệu và mất tất cả các thuộc tính tùy chỉnh mà bạn đã thêm trước đó. – camickr

4

setText là đặt tất cả văn bản trong một ô văn bản. Sử dụng giao diện StyledDocument để thêm, xóa, ans, v.v.

txtPane.getStyledDocument().insertString(
    offsetWhereYouWant, "text you want", attributesYouHope); 
+0

Cảm ơn bạn, Istao! – Dmitry

23

Một JEditorPane, chỉ cần một như một JTextPaneDocument mà bạn có thể sử dụng để chèn chuỗi.

Những gì bạn sẽ muốn làm gì để thêm văn bản vào một JEditorPane là đoạn này:

JEditorPane pane = new JEditorPane(); 
/* ... Other stuff ... */ 
public void append(String s) { 
    try { 
     Document doc = pane.getDocument(); 
     doc.insertString(doc.getLength(), s, null); 
    } catch(BadLocationException exc) { 
     exc.printStackTrace(); 
    } 
} 

Tôi đã thử nghiệm này và nó đã làm việc tốt cho tôi. doc.getLength() là nơi bạn muốn chèn chuỗi, rõ ràng với dòng này, bạn sẽ thêm nó vào cuối văn bản.

+1

Cảm ơn bạn, điều đó hoạt động !!! – Dmitry

+0

Nhưng tại sao setText + get Text không hoạt động? – Dmitry

+0

Tôi không thể trả lời chắc chắn, tôi đã không chơi xung quanh với JEditorPane ở tất cả, chỉ JTextPane chủ yếu. Tôi phải chơi xung quanh và nghiên cứu nó trước khi tôi có thể trả lời điều đó. –

Các vấn đề liên quan