deleteundoableedit.java

来自「这也是我在论坛上看见的一个程序。感觉非常好」· Java 代码 · 共 91 行

JAVA
91
字号
package com.sunking.tp.undoredo;

import javax.swing.undo.AbstractUndoableEdit;
import com.sunking.tp.framework.*;
import com.sunking.tp.util.*;
import javax.swing.undo.*;
import java.awt.*;
import java.util.*;

/**
 * <p>Title: DeleteUndoableEdit</p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2003</p>
 * <p>Company: </p>
 * @author <a href="mailto:sunkingxie@hotmail.com">SunKing</a>
 * @version 1.0
 */
public class DeleteUndoableEdit extends AbstractUndoableEdit {
    JTPComponent com[];
    Desktop desk;
    AssoicatorLine assoicatorLines[];
    boolean isDeleteAssoicatorLine = false;
    public DeleteUndoableEdit(Desktop desk, JTPComponent com[]) {
        this.com = com;
        this.desk = desk;
        if (com.length != 0) {
            isDeleteAssoicatorLine = false;
            Vector vecAssociate = new Vector();
            AssoicatorLine lines[] = desk.getAssoicatorLines();
            if(lines==null){
                assoicatorLines = new AssoicatorLine[0];
            }else{
                for (int i = 0; i < lines.length; i++) {
                    JTPComponent source = lines[i].getSource();
                    JTPComponent dest = lines[i].getDest();
                    for (int j = 0; j < com.length; j++) {
                        if (com[j] == source || com[j] == dest) {
                            vecAssociate.add(lines[i]);
                        }
                    }
                }
                assoicatorLines = new AssoicatorLine[vecAssociate.size()];
                vecAssociate.copyInto(assoicatorLines);
            }
        } else {
            isDeleteAssoicatorLine = true;
            assoicatorLines = new AssoicatorLine[1];
            assoicatorLines[0] = desk.getSelectionLine();
        }
    }

    public String getUndoPresentationName() {
        return JTPUtil.getString("Undo_Delete");
    }

    public String getRedoPresentationName() {
        return JTPUtil.getString("Redo_Delete");
    }

    public void undo() throws CannotUndoException {
        super.undo();
        if (isDeleteAssoicatorLine) {
            AssoicatorLine line = assoicatorLines[0];
            line.getSource().addAssociator(line.getDest(), line.getAssociateType());
        } else {
            for (int i = 0; i < com.length; i++) {
                ( (Container) desk).add( (Component) com[i]);
            }
            for (int i = 0; i < assoicatorLines.length; i++) {
                AssoicatorLine line = assoicatorLines[i];
                line.getSource().addAssociator(line.getDest(), line.getAssociateType());
            }
        }
        desk.fireAssoicatorChanged();
    }

    public void redo() throws CannotRedoException {
        super.redo();
        if (isDeleteAssoicatorLine) {
            AssoicatorLine line = assoicatorLines[0];
            line.getSource().removeAssociator(line.getDest());
            desk.fireAssoicatorChanged();
        } else {
            desk.clearSelection();
            for (int i = 0; i < com.length; i++) {
                desk.addSelection(com[i]);
            }
            desk.deleteSelection();
        }
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?