Я делаю сетевое приложение с функцией чата. В чате у меня один JTextPane
для вывода сообщений и еще один для ввода. Затем у меня есть несколько кнопок, которые позволяют добавить стиль к входному тексту (полужирный, курсив, размер шрифта, цвет). Текст правильно отформатирован на панели ввода, хотя при перемещении на панель отображения (после нажатия правильного JButton
) он имеет только формат последнего символа. Как переместить текст, сохранив его первоначальный формат? Например, если я напишу «Hello Worl d» на входе, на дисплее отобразится «Hello World d».
textPane - это панель ввода
Где установлено:
final SimpleAttributeSet set = new SimpleAttributeSet();
Код для выделения текста жирным шрифтом (так же, как и при добавлении других стилей):
bold.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
StyledDocument doc = textPane.getStyledDocument();
if (StyleConstants.isBold(set)) {
StyleConstants.setBold(set, false);
bold.setSelected(false);
} else {
StyleConstants.setBold(set, true);
bold.setSelected(true);
}
textPane.setCharacterAttributes(set, true);
}
});
код для перемещения текста из панели ввода в панель отображения:
getInput.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String input = textPane.getText();
textPane.setText("");
if(!input.endsWith("\n")){
input+="\n";
}
StyledDocument doc = displayPane.getStyledDocument();
int offset = displayPane.getCaretPosition();
try {
doc.insertString(offset, input, set);
} catch (BadLocationException ex) {
Logger.getLogger(ChatComponent.class.getName()).log(Level.SEVERE, null, ex);
}
}
});