Khi bạn setContentType ("text/html"), nó chỉ được áp dụng cho văn bản được đặt qua JTextPane.setText(). Tất cả các văn bản khác, được đưa vào JTextPane thông qua các kiểu là "miễn dịch" đối với loại nội dung.setContentType ("text/html") cho JTextPane không hoạt động như mong đợi
Dưới đây là những gì tôi có nghĩa là:
private final String[] messages = {"first msg", "second msg <img src=\"file:src/test/2.png\"/> yeah", "<img src=\"file:src/test/2.png\"/> third msg"};
public TestGUI() throws BadLocationException {
JTextPane textPane = new JTextPane();
textPane.setEditable(false);
textPane.setContentType("text/html");
//Read all the messages
StringBuilder text = new StringBuilder();
for (String msg : messages) {
textext.append(msg).append("<br/>");
}
textPane.setText(text.toString());
//Add new message
StyledDocument styleDoc = textPane.getStyledDocument();
styleDoc.insertString(styleDoc.getLength(), messages[1], null);
JScrollPane scrollPane = new JScrollPane(textPane, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
//add scrollPane to the main window and launch
//...
}
Nói chung, tôi có một cuộc trò chuyện đó được đại diện bởi JTextPane. Tôi nhận được tin nhắn từ máy chủ, xử lý chúng - thiết lập màu văn bản cho các trường hợp cụ thể, thay đổi dấu hiệu nụ cười thành đường dẫn hình ảnh, v.v. mọi thứ được thực hiện trong phạm vi HTML. Nhưng vì nó có thể được nhìn thấy rõ ràng từ ví dụ trên, chỉ có setText là chủ đề của setContentType ("text/html") và phần thứ hai, trong đó thông điệp mới được thêm vào được biểu diễn bằng "text/plain" (nếu tôi không nhầm).
Có thể áp dụng loại nội dung "văn bản/html" cho tất cả dữ liệu được chèn vào JTextPane không? Không có nó, hầu như không thể xử lý các thông điệp mà không cần triển khai các thuật toán rất phức tạp.
Tôi thực sự cảm thấy tôi là nhà phát triển không hiệu quả (cảm thấy tôi mới lập trình và lập trình GUI). Đôi khi tôi cảm thấy rằng Java Swing thiếu rất nhiều tính năng tốt và một nên thực hiện chúng mình nhưng kinh nghiệm của tôi không cho phép tôi làm điều đó và nó rối loạn cho tôi rất nhiều. Biến thể của bạn thậm chí còn lớn hơn Joop Eggen - nó linh hoạt hơn, nếu người ta có thể nói như vậy. – Dragon
Câu trả lời đầy đủ hơn, nên nhận Chấp nhận. –
@JoopEggen, (Offtopic) Họ có một chút khác biệt, nhưng cả hai đều tốt. Tôi cần phải kiểm tra chúng trong bối cảnh đầy đủ - đó là những gì tôi làm bây giờ :) – Dragon