Сохранение формата при поиске текста

Я делаю сетевое приложение с функцией чата. В чате у меня один 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);
                }
            }
        });

person Giannis    schedule 27.01.2012    source источник
comment
пожалуйста, что вы вернули Документ, продолжение stackoverflow.com/questions/9022366/   -  person mKorbel    schedule 28.01.2012
comment
Да, я улучшил вопрос, чтобы проблема и то, что я сделал, стало яснее.   -  person Giannis    schedule 28.01.2012
comment
(-: ничего против вашей личности:-) для возможного ответа   -  person mKorbel    schedule 28.01.2012
comment
мой вопрос, почему (упростил вещи) вы хотели скопировать документ с атрибутами, setDocument/Attributes/padding в действии или из источника, который пришел из   -  person mKorbel    schedule 28.01.2012
comment
Вы имеете в виду, почему я использую документ для копирования текста? Это потому, что я не хочу, чтобы сообщения, уже отображаемые на displayPane, удалялись (как это произошло бы с setText())   -  person Giannis    schedule 28.01.2012
comment
чат это двунаправленная коммуникация, на той что вы написали, на отправке вы копируете эти слова в общую зону, где вы видите свои действия и ответ с другого канала, не так ли   -  person mKorbel    schedule 28.01.2012
comment
Как только эта часть заработает, и я узнаю, как правильно скопировать текст, я просто отправлю его по сети, чтобы он также отображался на других элементах displayPanes.   -  person Giannis    schedule 28.01.2012
comment
@latusaki: Если можно, опубликуйте фотографии того, что именно происходит, а затем расскажите, чего вы ожидали, это может добавить веса вашему вопросу. С Уважением   -  person nIcE cOw    schedule 28.01.2012
comment
Извините за поздний ответ, я не смог войти раньше. Как я описал в вопросе, стиль последнего символа текста применялся ко всей строке при перемещении в displayPane. Хотя решение, показанное в ответе @StanislavL, работает.   -  person Giannis    schedule 29.01.2012


Ответы (1)


Используйте пример для объединения обоих документов http://java-sl.com/tip_merge_documents.html.

person StanislavL    schedule 28.01.2012
comment
Спасибо за это ! Я думаю, поскольку мне нужно отправлять сообщения, я просто отправляю свой документ другим клиентам, и там произойдет слияние. - person Giannis; 29.01.2012