javax.swing.undo.AbstractUndoableEdit는 Swing 라이브러리의 일부로, 사용자 인터페이스에서 발생하는 변경 사항을 취소하거나 다시 실행할 수 있는 기능을 제공하는 클래스입니다.
AbstractUndoableEdit 클래스는 UndoableEdit 인터페이스를 구현하고 있습니다. UndoableEdit 인터페이스는 사용자 인터페이스에서 발생하는 변경 사항을 취소하거나 다시 실행할 수 있는 기능을 정의합니다. 이 인터페이스는 다음과 같은 메서드를 정의합니다.
- undo() : 변경 사항을 취소합니다.
- redo() : 변경 사항을 다시 실행합니다.
- canUndo() : 변경 사항을 취소할 수 있는지 여부를 반환합니다.
- canRedo() : 변경 사항을 다시 실행할 수 있는지 여부를 반환합니다.
- isSignificant() : 변경 사항이 중요한지 여부를 반환합니다.
AbstractUndoableEdit 클래스는 이러한 메서드를 구현하고 있습니다. 이 클래스를 상속받아 새로운 UndoableEdit 클래스를 만들 수 있습니다. 이 클래스는 취소 가능한 편집을 나타내는 데 사용됩니다.
AbstractUndoableEdit 클래스에는 다음과 같은 중요한 메서드가 있습니다.
- addEdit(UndoableEdit anEdit) : 새로운 UndoableEdit 객체를 추가합니다.
- replaceEdit(UndoableEdit anEdit) : 현재 UndoableEdit 객체를 새로운 객체로 대체합니다.
- isSignificant() : 이 편집이 중요한지 여부를 나타내는 boolean 값을 반환합니다.
- getPresentationName() : 이 편집을 설명하는 문자열을 반환합니다.
- getUndoPresentationName() : 이 편집을 취소하는 데 사용되는 문자열을 반환합니다.
- getRedoPresentationName() : 이 편집을 다시 실행하는 데 사용되는 문자열을 반환합니다.
AbstractUndoableEdit 클래스는 사용자 인터페이스에서 발생하는 변경 사항을 취소하거나 다시 실행할 수 있는 기능을 제공하는데 매우 유용합니다. 이 클래스를 사용하면 사용자 인터페이스에서 발생하는 변경 사항을 쉽게 관리할 수 있습니다.
덧붙이자면, AbstractUndoableEdit 클래스는 취소 가능한 편집을 나타내는 기본적인 구현을 제공합니다. 이 클래스를 상속받아 새로운 UndoableEdit 클래스를 만들어 사용자 정의 편집을 생성할 수 있습니다.
AbstractUndoableEdit 클래스는 내부적으로 UndoableEditSupport 클래스를 사용하여 이벤트를 처리합니다. 이 클래스는 이벤트 리스너 인터페이스를 구현하는 클래스를 등록하고, 변경 사항이 발생할 때 이벤트를 전달합니다. 이를 통해 UndoableEditListener 인터페이스를 구현한 클래스에서 이벤트를 처리하고, 필요한 작업을 수행할 수 있습니다.
AbstractUndoableEdit 클래스는 Swing의 UndoManager 클래스와 함께 사용되기도 합니다. UndoManager 클래스는 사용자 인터페이스에서 발생하는 변경 사항을 취소하거나 다시 실행할 수 있는 기능을 제공하는 매우 유용한 클래스입니다. UndoManager 클래스는 UndoableEdit 객체를 스택으로 관리하며, 새로운 변경 사항이 발생하면 스택에 추가합니다. 사용자가 Undo 또는 Redo를 요청하면 UndoManager 클래스는 스택에서 UndoableEdit 객체를 꺼내어 해당 객체의 undo() 또는 redo() 메서드를 호출합니다. 이때 AbstractUndoableEdit 클래스에서 구현한 undo() 또는 redo() 메서드가 호출됩니다.
따라서 AbstractUndoableEdit 클래스는 Swing 라이브러리에서 사용자 인터페이스에서 발생하는 변경 사항을 취소하거나 다시 실행할 수 있는 기능을 구현하기 위해 매우 중요한 클래스입니다. 이 클래스를 사용하면 사용자 인터페이스에서 발생하는 변경 사항을 쉽게 관리하고, Undo 및 Redo 기능을 제공할 수 있습니다.
아래는 AbstractUndoableEdit 클래스를 상속받아 사용자 정의 UndoableEdit 클래스를 만드는 예제 코드입니다. 이 예제 코드는 JTextArea에서 텍스트를 추가하거나 삭제하는 작업을 Undo 및 Redo 할 수 있도록 구현한 것입니다.
import javax.swing.undo.*;
public class TextEdit extends AbstractUndoableEdit {
private JTextArea textArea;
private String text;
private int start;
private boolean isUndo;
public TextEdit(JTextArea textArea, String text, int start, boolean isUndo) {
this.textArea = textArea;
this.text = text;
this.start = start;
this.isUndo = isUndo;
}
public void undo() throws CannotUndoException {
super.undo();
try {
if (isUndo) {
textArea.insert(text, start);
} else {
textArea.replaceRange("", start, start + text.length());
}
} catch (BadLocationException e) {
throw new CannotUndoException();
}
}
public void redo() throws CannotRedoException {
super.redo();
try {
if (isUndo) {
textArea.replaceRange("", start, start + text.length());
} else {
textArea.insert(text, start);
}
} catch (BadLocationException e) {
throw new CannotRedoException();
}
}
public boolean canUndo() {
return true;
}
public boolean canRedo() {
return true;
}
public boolean isSignificant() {
return true;
}
}
위 코드에서는 TextEdit 클래스를 AbstractUndoableEdit 클래스를 상속받아 구현합니다. 이 클래스는 JTextArea에서 텍스트를 추가하거나 삭제하는 작업을 취소할 수 있습니다.
TextEdit 클래스에는 JTextArea 객체, 추가 또는 삭제할 텍스트, 시작 위치 및 Undo 또는 Redo 여부를 나타내는 변수가 있습니다. undo() 메서드는 취소 작업을 수행하며, redo() 메서드는 다시 실행 작업을 수행합니다. canUndo(), canRedo() 및 isSignificant() 메서드는 각각 Undo 또는 Redo가 가능한지 여부와 이 작업이 중요한지 여부를 나타냅니다.
이 클래스를 사용하려면 UndoableEditSupport 객체를 생성하고 addEdit() 메서드를 사용하여 TextEdit 객체를 추가해야 합니다. 이를 통해 UndoableEditListener 인터페이스를 구현한 클래스에서 이벤트를 처리하고, 필요한 작업을 수행할 수 있습니다.
'PT선생님의 코딩 강좌' 카테고리의 다른 글
[PT선생님][63]javax.swing.text.AbstractWriter 알아보기 (0) | 2023.03.07 |
---|---|
[PT선생님][62]org.w3c.dom.views.AbstractView 알아보기 (0) | 2023.03.07 |
[PT선생님][60]javax.lang.model.util.AbstractTypeVisitor9 알아보기 (0) | 2023.03.06 |
[PT선생님][59]javax.lang.model.util.AbstractTypeVisitor8 알아보기 (0) | 2023.03.06 |
[PT선생님][58]javax.lang.model.util.AbstractTypeVisitor7 알아보기 (0) | 2023.03.06 |