Ola!
Estou a escrever um programa que usa uma JTextArea onde se escreve e quando se clica no enter, supostamente apaga tudo mas da-me sempre um erro. Em baixo vai um exemplo de como eu uso isto.
Eu já tentei :
writeArea.replaceRange("",0,doc.getLength());
writeArea.setText("");
doc.remove(0,doc.getLength());
VER LINHA 74
Não consigo pensar em mais nada para resolver o problema!
Durante o run, eu escrevo qualquer coisa e assim que eu carrego no enter aparece isto: ( que eu não sei interpretar )
Exception in thread “AWT-EventQueue-0” java.lang.IllegalStateException: Attempt to mutate in notification
at javax.swing.text.AbstractDocument.writeLock(AbstractDocument.java:1323)
at javax.swing.text.AbstractDocument.replace(AbstractDocument.java:644)
at javax.swing.JTextArea.replaceRange(JTextArea.java:502)
at exemplo.insertUpdate(exemplo.java:74)
at javax.swing.text.AbstractDocument.fireInsertUpdate(AbstractDocument.java:185)
at javax.swing.text.AbstractDocument.handleInsertString(AbstractDocument.java:734)
at javax.swing.text.AbstractDocument.insertString(AbstractDocument.java:693)
at javax.swing.text.PlainDocument.insertString(PlainDocument.java:114)
at javax.swing.text.AbstractDocument.replace(AbstractDocument.java:655)
at javax.swing.text.JTextComponent.replaceSelection(JTextComponent.java:1351)
at javax.swing.text.DefaultEditorKit$InsertBreakAction.actionPerformed(DefaultEditorKit.java:952)
at javax.swing.plaf.basic.BasicTextUI$TextActionWrapper.actionPerformed(BasicTextUI.java:2065)
at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1636)
at javax.swing.JComponent.processKeyBinding(JComponent.java:2849)
at javax.swing.JComponent.processKeyBindings(JComponent.java:2884)
at javax.swing.JComponent.processKeyEvent(JComponent.java:2812)
at java.awt.Component.processEvent(Component.java:5818)
at java.awt.Container.processEvent(Container.java:2058)
at java.awt.Component.dispatchEventImpl(Component.java:4413)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Component.dispatchEvent(Component.java:4243)
at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1848)
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:697)
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:962)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:834)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:661)
at java.awt.Component.dispatchEventImpl(Component.java:4285)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Window.dispatchEventImpl(Window.java:2440)
at java.awt.Component.dispatchEvent(Component.java:4243)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
Se não funcionar, tenta criar um evento que ouve a tecla enter, e quando ela for precionada ele simplesmente faz um getText(), e vc pega o texto. E em seguida limpa com um setText()
Eu fiz mais ou menos o que você disse:
No metodo keyPressed do KeyListener eu escrevi:
public void keyPressed(KeyEvent e)
{
int keyCode = e.getKeyCode();
if (keyCode==10)
{
enterPressed=true;
text=writeArea.getText();
writeArea.setText("");
chatArea.append("You: " + text);
chatArea.setCaretPosition(chatArea.getDocument().getLength());
}
}
E DEU!!!
Mas agora eu fiquei sem perceber para que ser o documentListener
O Document Listener é usado quando se precisa por exemplo formatar o texto em tempo real.
Eu usei quando precisava converter de minusculas para maiusculas em tempo real.
Mas quando os eventos não resolvem, só aí apelamos para o DocumentListener =)