Sto creando un editor di testo utilizzando Java swing. Sto usando JTextArea per lo stesso. Voglio sapere come posso usare la funzionalità Annulla e Ripristina in JTextArea poiché non sono in grado di usarlo.Utilizzo di Annulla e Ripristina per JTextArea
risposta
Come ho capito, JTextArea non ha alcuna funzionalità di annullamento/ripristino incorporata, ma un Google search ha trovato this article che potrebbe essere utile.
Sembra esistere uno Undo Manager in javax.swing
che è possibile collegare agli eventi di modifica di JTextArea.
suo stato un po 'che ho fatto questo e io non ricordare i dettagli, ma qui è un legame con alcune informazioni: http://java.sun.com/docs/books/tutorial/uiswing/components/generaltext.html
Scorrere fino alla sezione intitolata "Ascolto per le modifiche su un documento" per iniziare .
+1, chi è la persona che ha downvoted questo ?? Il tutorial ha un esempio funzionante e spiega cosa sta succedendo, che sicuramente risponde alla domanda. Ora spetta all'OP leggere il tutorial, infatti l'OP dovrebbe aver letto prima il tutorial prima di pubblicare questa domanda. Infatti, se l'utente non era a conoscenza dell'esercitazione di Swing prima di sapere di avere accesso a un riferimento di valore che può essere d'aiuto per le domande future. Questo è il modo in cui tutte le domande dovrebbero essere risolte. – camickr
Grazie per le tue parole gentili :) –
Grazie per le tue osservazioni sarcastiche camickr. Grazie per l'aiuto di Marshall. – Logan
Si può fare come questo
UndoManager manager = new UndoManager();
textArea.getDocument().addUndoableEditListener(manager);
Una volta che il gestore è allegata al documento del JTextArea, che controllerà tutte le modifiche per il contenuto del testo.
Dopo aver collegato il gestore al componente di testo, è necessario fornire alcuni mezzi per dire al manager di annullare/ripetere un'operazione.
chiamata della funzione Annulla public void() e public void redo() il metodo del UndoManager dove (metodo di un ActionListener Eg. ActionPerformed()) necessari
È possibile allegare Azione oggetti a un pulsante nel modo seguente invece di chiamare undo() e redo() metodi che semplifica il compito:
JButton undoButton = new JButton(UndoManagerHelper.getUndoAction(manager));
JButton redoButton = new JButton(UndoManagerHelper.getRedoAction(manager));
ho dovuto passare attraverso molteplici collegamenti solo per ottenere abbastanza aiuto. Sto aggiungendo qui ciò che ho implementato con successo solo per aiutare i futuri visitatori. Ho implementato questo utilizzando JTextPane ma sto assumendo che lo stesso si applicherebbe per JTextArea
JTextArea textArea = new JTextArea();
JButton undo = new JButton("Undo");
JButton redo = new JButton("Redo");
KeyStroke undoKeyStroke = KeyStroke.getKeyStroke(
KeyEvent.VK_Z, Event.CTRL_MASK);
KeyStroke redoKeyStroke = KeyStroke.getKeyStroke(
KeyEvent.VK_Y, Event.CTRL_MASK);
UndoManager undoManager = new UndoManager();
Document document = textArea.getDocument();
document.addUndoableEditListener(new UndoableEditListener() {
@Override
public void undoableEditHappened(UndoableEditEvent e) {
undoManager.addEdit(e.getEdit());
}
});
// Add ActionListeners
undo.addActionListener((ActionEvent e) -> {
try {
undoManager.undo();
} catch (CannotUndoException cue) {}
});
redo.addActionListener((ActionEvent e) -> {
try {
undoManager.redo();
} catch (CannotRedoException cre) {}
});
// Map undo action
textArea.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
.put(undoKeyStroke, "undoKeyStroke");
textArea.getActionMap().put("undoKeyStroke", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
try {
undoManager.undo();
} catch (CannotUndoException cue) {}
}
});
// Map redo action
textArea.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
.put(redoKeyStroke, "redoKeyStroke");
textArea.getActionMap().put("redoKeyStroke", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
try {
undoManager.redo();
} catch (CannotRedoException cre) {}
}
});
- 1. Annulla/Ripristina in WPF?
- 2. Disabilita Annulla e Ripristina nei browser
- 3. NSUndoManager, Dati principali e annulla/ripristina selettiva
- 4. Disabilita annulla/ripristina nell'app Cocoa
- 5. Implementazione di Annulla - Ripristina funzionalità in Qt?
- 6. UITextField inputView visualizza annulla, ripristina, incolla i pulsanti
- 7. Come annulla/ripristina fondamentalmente funziona su iPhone OS?
- 8. Entity Framework - Start Over - Annulla/Ripristina tutte le migrazioni
- 9. Annulla/ripristina veloce per l'editor di bitmap quando la memoria è limitata?
- 10. Rende non modificabili parti di un JTextArea (non l'intero JTextArea!)
- 11. Usabilità Web: salva e annulla ... oppure ... annulla e salva?
- 12. JTextArea e JTextField riempimento interno sul testo
- 13. Java - JPanel con margini e JTextArea all'interno
- 14. Java JTextArea che ridimensiona e scorre automaticamente
- 15. Padding interno per JTextArea con sfondo Image
- 16. Sovrascrivi e ripristina una funzione
- 17. Java JTextArea KeyListener
- 18. Salva e ripristina stato vim
- 19. Line-Spacing in JTextArea
- 20. Log Java ==> JTextArea
- 21. scrollbars in JTextArea
- 22. Funzione prompt 5.1() e annulla
- 23. Identifica e annulla un invio di allarme ad un AlarmManager
- 24. Ripristina portachiavi di un'app per iPhone
- 25. Ripristina/ripristina schema colori carattere Xcode predefinito?
- 26. JTextArea ridimensionamento a capo di parole
- 27. Aggiunta di margini in una JTextArea?
- 28. Disabilita Annulla per creazione/eliminazione di NSManagedObject
- 29. fine linea automatica in JTextArea
- 30. Come mantenere costante la dimensione di JTextArea?
Ecco un collegamento con un esempio più completo: http://www.java-forums.org/javax-swing/9570-undo-redo-jtextarea.html –
Grazie Peter. Ho risolto il mio problema. – Logan
@Petar Il codice dietro il tuo link non gestisce cosa succede quando tutto il testo è selezionato e sostituito con il contenuto degli appunti. Quello che succede è che l'area di testo viene svuotata invece di essere sostituita con il suo contenuto precedente. Repro: (1) mettere qualcosa negli appunti, (2) selezionare tutti i caratteri nell'area di testo, (3) premere^V per incollare gli appunti sul contenuto selezionato. Non so ancora cosa sta succedendo, ma intendo scoprirlo. Lo stesso vale per il codice dietro il link pubblicato in questa risposta. Ho la sensazione che il problema sia la definizione di "contenuto precedente". – jeff6times7