Mam problem z zrealizowaniem prostego uzupełniania wprowadzonego tekstu w JTextField o dodatkowe znaki. A dokładnie chodzi o to że użytkownik wpisuje tekst do pola JTextField np. date w postaci RRRRMMDD a program automatycznie w trakcie wprowadzania rozdziela rok, miesiąc, dzień znakiem "-".

Chciałem to wykonać w oparciu o DocumentListener który by sprawdzał ile jest wprowadzonych znaków w przypadku gdy jest ich już 4 to dopisuje do pola "-" użytkownik pisze dalej gdy string osiągnie długość 7 dopisuje kolejny "-" a na końcu użytkownik dopisuje jedynie dzień. Efekt końcowy => 2010-06-03.

A to fragment kodu który miał to robić

.
.
		tekst = new JTextField(20);
		panel.add(tekst);
		tekst.getDocument().addDocumentListener(new kontrolaPola(tekst));
.
.
class kontrolaPola implements DocumentListener {

	public kontrolaPola(JTextField komp) {
		komponent = komp;
	}

	public void changedUpdate(DocumentEvent arg0) {

	}

	public void insertUpdate(DocumentEvent arg0) {
		if (komponent.getText().length() == 4) {
			komponent.setText(komponent.getText() + "-");
		}
		if (komponent.getText().length() == 7) {
			komponent.setText(komponent.getText() + "-");
		}
	}

	public void removeUpdate(DocumentEvent arg0) {

	}

	private JTextField komponent;
}

Jednak efektem jego działania jest błąd:

Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: Attempt to mutate in notification

Macie może jakiś pomysł jak mogę usunąć przyczynę błędu ewentualnie wykonać co chciałem inna metodą.

**************************************************************************

Znalazłem rozwiązanie jednak do końca nie rozumiem jak ono działa dla zainteresowanych problemem zmodyfikowany kod poniżej.

class kontrolaPola implements DocumentListener {

	public kontrolaPola(JTextField komp) {
		komponent = komp;
	}

	public void changedUpdate(DocumentEvent arg0) {

	}

	public void insertUpdate(DocumentEvent arg0) {
		Runnable r = new Runnable() {
			public void run() {
				if (komponent.getText().length() == 4) {
					komponent.setText(komponent.getText() + "-");
				}
				if (komponent.getText().length() == 7) {
					komponent.setText(komponent.getText() + "-");
				}
			}
		};
		SwingUtilities.invokeLater(r);
	}

	public void removeUpdate(DocumentEvent arg0) {

	}

	private JTextField komponent;
}