Я пытаюсь создать очень простое окно чата, которое просто имеет возможность отображать некоторый текст, к которому я добавляю время от времени. Однако я получаю следующее сообщение об ошибке во время выполнения программы при попытке добавить текст к окну:Java Simple Chat Box
java.lang.ClassCastException: javax.swing.JViewport cannot be cast to javax.swing.JTextPane
at ChatBox.getTextPane(ChatBox.java:41)
at ChatBox.getDocument(ChatBox.java:45)
at ChatBox.addMessage(ChatBox.java:50)
at ImageTest2.main(ImageTest2.java:160)
Вот класс обрабатывать основные операции:
public class ChatBox extends JScrollPane {
private Style style;
public ChatBox() {
StyleContext context = new StyleContext();
StyledDocument document = new DefaultStyledDocument(context);
style = context.getStyle(StyleContext.DEFAULT_STYLE);
StyleConstants.setAlignment(style, StyleConstants.ALIGN_LEFT);
StyleConstants.setFontSize(style, 14);
StyleConstants.setSpaceAbove(style, 4);
StyleConstants.setSpaceBelow(style, 4);
JTextPane textPane = new JTextPane(document);
textPane.setEditable(false);
this.add(textPane);
}
public JTextPane getTextPane() {
return (JTextPane) this.getComponent(0);
}
public StyledDocument getDocument() {
return (StyledDocument) getTextPane().getStyledDocument();
}
public void addMessage(String speaker, String message) {
String combinedMessage = speaker + ": " + message;
StyledDocument document = getDocument();
try {
document.insertString(document.getLength(), combinedMessage, style);
} catch (BadLocationException badLocationException) {
System.err.println("Oops");
}
}
}
Если есть более простой способ сделать это , дайте мне знать. Мне нужен только текст, который будет иметь один тип шрифта и не будет использоваться пользователем. Помимо этого, мне просто нужно иметь возможность добавлять текст «на лету».
Я думаю, что это опечатка, должно быть 'GetView()' 'не getViewportView()'. – JRL
@JRL: Ты прав; Я просто предположил, что в учебниках Swing было все правильно. Такого рода болит мой смысл читать их. –
Несмотря на то, что опечатка исправлена, проблема заключается в том, что текстовое поле не добавлено в окно просмотра, так что это не решит проблему. – camickr