package Edit;
import Find.FindAndReplace;
import Main.*;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
import java.util.Calendar;
import java.util.regex.Pattern;
import javax.swing.JOptionPane;
/**
 *@description 整合,实现编辑菜单下的所有功能
 * @author 小路
 * @date 2013-05-07
 */
public class Edit {
    private MainFrame mf;
    //获取系统剪切板
    private Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
    private StringSelection contents;
    public Edit(MainFrame mf)
    {
        this.mf = mf;
    }
    //返回系统剪切板内是否保存的有复制或剪切的文字信息
    public Boolean isCopyedOrCut()
    {
        String  str = null;
        try {
            str = (String)clipboard.getData(DataFlavor.stringFlavor);
        } catch (Exception ex) {
            ex.printStackTrace();
        } 
        return str!=null||str!="";//如果系统剪切板中存在内容则返回true
    }
    //实现撤销方法,包括右键菜单中的撤销方法
    public void Cancle()
    {
        if(mf.get_undo().canUndo())
        {
            mf.get_undo().undo();
        }
    }
    //实现恢复方法,包括右键菜单中的恢复方法
    public void Recover()
    {
        if(mf.get_undo().canRedo())
        {
            mf.get_undo().redo();
        }
    }
    //实现剪切方法,包括右键菜单中的剪切方法
    public void Cut()
    {
        String str = mf.getMainText().getSelectedText().replaceAll("\n", "");
        contents = new StringSelection(str);//将string对象封装成StringSelection对象
        clipboard.setContents(contents, null);
        mf.getMainText().replaceSelection("");      
    }
    //实现复制方法,包括右键菜单中的复制方法
    public void Copy()
    {
        String str = mf.getMainText().getSelectedText().replaceAll("\n", "");
        contents = new StringSelection(str);
        clipboard.setContents(contents, null);
    }
    //是按粘贴方法,包括右键菜单中的粘贴方法
    public void Paste()
    {     
        if(clipboard.isDataFlavorAvailable(DataFlavor.stringFlavor))
        {
            try {
                //取出剪切板中的内容
                String content = (String)clipboard.getData(DataFlavor.stringFlavor);
                if(mf.getMainText().getSelectedText()!=null)//如果粘贴的时候选中了文字,则覆盖文字
                {
                    mf.getMainText().replaceSelection(content);
                }
                else//如果没有选中文字,则插入文字
                {
                    mf.getMainText().insert(content, mf.getMainText().getCaretPosition());
                }
            } catch (Exception ex) {
                ex.printStackTrace();
            } 
        }
    }
    //实现删除方法,包括右键菜单中的删除方法
    public void Delete()
    {
        mf.getMainText().replaceSelection("");//把选中的文字替换为空
    }
    //实现查找方法
    public void Find()
    {
        FindAndReplace far = new FindAndReplace(mf);
        far.showFindAndReplace(mf, "查找");
    }
    //实现查找下一个方法
    public void FindNext()
    {
        FindAndReplace far = new FindAndReplace(mf);
        far.showFindAndReplace(mf, "查找下一个");
    }
    //实现替换方法
    public void Replace()
    {
        FindAndReplace far = new FindAndReplace(mf);
        far.showFindAndReplace(mf, "替换");
    }
    //实现转到方法
    public void SwitchTo()
    {
        String [] text = mf.getMainText().getText().split("\n");
        String str = JOptionPane.showInputDialog(mf, "行数(L):","转到下列行",
                JOptionPane.QUESTION_MESSAGE);      
        if(str!=null)//str==null是点击了取消按钮触发的事件
        {
            Pattern pattern = Pattern.compile("[0-9]");
            if(str.trim().length()!=0&&pattern.matcher(str).matches())
            {
                int row = Integer.parseInt(str);
                if(row>=1&&row<=text.length)
                {
                    int pos = 0;
                    for(int i = 0;i<row-1;i++)
                    {
                        pos += text[i].length() + 1;
                    }
                    mf.getMainText().setCaretPosition(pos);
                }
                else
                {
                    JOptionPane.showMessageDialog(mf, "列数超出范围!", "错误提示", JOptionPane.ERROR_MESSAGE);
                }
            } 
            else
            {
                JOptionPane.showMessageDialog(mf, "无效的字符!", "错误提示", JOptionPane.ERROR_MESSAGE);
            }
        }
    }
    //实现全选方法,包括右键菜单中的全选方法
    public void SelectAll()
    {
        mf.getMainText().selectAll();
    }
    //实现日期/时间方法
    public void insetDatetime()
    {
        Calendar calendar = Calendar.getInstance();
        int pos = mf.getMainText().getCaretPosition();//获取光标所在位置
        mf.getMainText().insert(calendar.getTime().toString(), pos);
    }
    //右键菜单中的打开软键盘方法
    public void OpenKeyboard()
    {
        
    }
    //右键菜单中的关闭软键盘方法
    public void CloseKeyboard()
    {
        
    }
}
最近下载更多
xxxjjn  LV1 6月16日
queueandstack  LV3 2022年12月2日
沙发床上的  LV1 2022年5月30日
183077946781  LV1 2021年11月15日
尹恒yingying  LV18 2021年10月12日
任天晴  LV1 2021年7月10日
ncy123456789  LV6 2021年7月6日
毫无qiushengyu  LV2 2021年7月2日
祁康伟  LV1 2021年7月1日
周星星哥哥在外面  LV1 2021年6月15日
最近浏览更多
krispeng  LV13 9月15日
xxxjjn  LV1 6月16日
mikrokosmos_2024  LV1 6月15日
梁小贤  LV1 4月27日
ruo12138  LV1 4月11日
潘潘123456  LV2 3月2日
lsglsg9  LV23 2023年12月29日
lshlsh 2023年12月25日
暂无贡献等级
sunshine9920  LV12 2023年10月20日
卢本伟不开挂  LV4 2023年9月3日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友