ERLEDIGT
NEIN
NEIN
ANTWORTEN
0
0
ZUGRIFFE
380
380
EMPFEHLEN
-
Hallo,
ich bastel an einem Editor mit Syntaxhighlightning und Undo/Redo Operation. Ihc benutze das JTextPane und für Undo & Redo benutze ich den UndoManager von Swing. Das ganze funktioniert eigentlich auch. Nach jeder Eingabe wird der Text geparst und mittels setCharacterAttributes vom DefaulStyledDocument der Text farbig formatiert.
Das stellt auch das Problem dar, dadurch das ich setCharacterAttributes aufrufe wird auch dieses UndoEvent, also die Formatänderung, in der Undo Historie abgelegt. Dazu habe ich mir eine kleine abhilfe gemacht die auch funktioniert ABER wenn das JTextPane ganz leer ist, also z.B. alle Undo's gemacht wurden UND dann wird ein Redo gemacht hängt sich das Programm auf. Nach ca. 2min's geht es wieder.
Meine Abhilfe ist das einafch vor dem Formatieren des Textes wird eine Variable im UndoManager auf false gesetzt, und ab da an werden keine UndoEvent's mehr gespeichert.
Hier mal ein Ausschnit aus meiner ContentPanel Datei, in der auch das JTextPane etc. ist.
Code JAVA:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
public ContentPanel() { initialize(); initializeComponents(); textPane.getDocument().addUndoableEditListener(undoableEditListener = new MyUndoableEditListener()); } public void redo() { try { undo.redo(); } catch (CannotRedoException ex) { System.out.println("Unable to redo: " + ex); ex.printStackTrace(); } updateRedoState(); updateUndoState(); } public void undo() { try { undo.undo(); } catch (CannotUndoException ex) { System.out.println("Unable to undo: " + ex); ex.printStackTrace(); } updateUndoState(); updateRedoState(); } public void highlightDocument() { undoableEditListener.setHighlightMode(true); // Code... // ... attr = highlighter.getAttributeSet(word); // Hier passiert die Formatänderung document.setCharacterAttributes(offset, length, attr, true); } } catch (BadLocationException ble) { System.err.println("Couldn't insert initial text."); } undoableEditListener.setHighlightMode(false); } public void updateUndoState() { if(undo.canUndo()) { UndoAction.getInstance().setEnabled(true); //System.out.println(undo.getUndoPresentationName()); } else { UndoAction.getInstance().setEnabled(false); } } public void updateRedoState() { if (undo.canRedo()) { RedoAction.getInstance().setEnabled(true); //System.out.println(undo.getRedoPresentationName()); } else { RedoAction.getInstance().setEnabled(false); } } class MyUndoableEditListener implements UndoableEditListener { private boolean highlightMode = false; public boolean isHighlightMode() { return highlightMode; } public void setHighlightMode(boolean highlightMode) { this.highlightMode = highlightMode; } public void undoableEditHappened(UndoableEditEvent e) { // Hier wenn der HighlightMode aus ist (=false) dann werden die UndoEvent's gespeichert if(isHighlightMode() == false) { undo.addEdit(e.getEdit()); updateUndoState(); updateRedoState(); } } }
Und hier noch eine Action, die ausgeführt wird wenn STRG-Z gedrückt wird:
Code JAVA:1 2 3 4 5 6 7 8 9 10 11
private UndoAction(String name, Icon icon) { super(name, icon); putValue(Action.SHORT_DESCRIPTION, name); setEnabled(false); } @Override public void actionPerformed(ActionEvent arg0) { System.out.println(getValue(NAME)); MainFrame.getContentPanel().undo(); }
Ich hoffe mir kann jemand bei diesem Problem helfen! :$Geändert von zer0 (02.02.11 um 09:04 Uhr)
Wenn dir mein Beitrag hilfreich war darfst du gerne Danke klicken! :)
watch my blog @ websocialist.blogspot.com
Ähnliche Themen
-
Max hängt sich beim Rendern auf
Von devian82 im Forum 3D Studio MaxAntworten: 3Letzter Beitrag: 04.12.09, 17:52 -
XML Ladeschnittstelle hängt beim auslesen
Von nightcrawler86 im Forum Javascript & AjaxAntworten: 3Letzter Beitrag: 23.08.08, 05:00 -
C4D R10 hängt sich beim booten auf...
Von Hydrogencarbonat im Forum Cinema 4DAntworten: 4Letzter Beitrag: 17.06.07, 08:54 -
Rechner hängt beim Start
Von Onkel Schuppig im Forum HardwareAntworten: 1Letzter Beitrag: 17.09.06, 13:37 -
PS hängt sich beim Start auf!
Von Ttobi im Forum PhotoshopAntworten: 3Letzter Beitrag: 29.05.05, 20:12





Zitieren
Login





