Ваш вопрос не имеет смысла.
Сначала вы говорите «если пользователь вводит в ...», что подразумевает, что пользователь что-то делает.
Затем вы говорите, что хотите «сделать что-то подобное ...», что подразумеваетвы делаете что-то в коде, который не находится под контролем пользователя, потому что вы вручную вызываете метод insertString ().
Опубликуйте свой SSCCE, который демонстрирует проблему, и опишите точные шаги для ее дублирования.
Есть ли способ вернуть атрибуты к тому состоянию, в котором они были изначально?
Атрибуты сбрасываются каждый раз, когда каретка меняет положение, поэтому вам необходимо обработать это с помощью CaretListener.Что-то вроде:
// <applet code="ResetAttributesInDocument.class" width="400" height="400"></applet>
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;
public class ResetAttributesInDocument extends JApplet implements CaretListener
{
private ButtonListener bl = new ButtonListener();
private JTextPane myJTextComponent;
private SimpleAttributeSet set;
public void init() {
JPanel contentPanel = new JPanel(new BorderLayout());
myJTextComponent = new JTextPane();
myJTextComponent.addCaretListener( this );
contentPanel.add(myJTextComponent, BorderLayout.CENTER);
JButton insertTextButton = new JButton("Insert text");
insertTextButton.addActionListener(bl);
contentPanel.add(insertTextButton, BorderLayout.SOUTH);
getContentPane().add(contentPanel);
set = new SimpleAttributeSet();
StyleConstants.setFontFamily(set, "Courier New");
StyleConstants.setForeground(set, Color.GREEN);
}
public void caretUpdate(CaretEvent e)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
String styleFamily = StyleConstants.getFontFamily( set );
AttributeSet attributes = myJTextComponent.getCharacterAttributes();
String attributeFamily = attributes.getAttribute(StyleConstants.FontFamily).toString();
if (! styleFamily.equals(attributeFamily))
{
StyledEditorKit k = (StyledEditorKit)myJTextComponent.getEditorKit();
k.getInputAttributes().removeAttributes(set);
}
}
});
}
class ButtonListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
final Document doc = myJTextComponent.getDocument();
final int caretPosition = myJTextComponent.getCaretPosition();
try
{
doc.insertString(caretPosition, "text in Courier New", set);
}
catch (BadLocationException e1) {
e1.printStackTrace();
}
}
}
}