(JavaFx项目)一个鼠标点击训练的小程序(三)

本文详细描述了一个Java项目中实现剪切板功能的过程,包括需求分析(如控制键操作、撤销/重做机制)、Clipboard类的创建、在InteractionModel中整合剪贴板、快捷键设置以及对剪切/复制/粘贴操作的可逆性和选择行为的优化。

 

目录

 项目需求

Part3

需求分析

项目实现

实现剪切板功能


 项目需求

Part3

需求分析

        实现流程:

                总的来说就是实现剪切板功能

                3.1 如果有选择,按Control-X键将选择的项目放在应用程序的剪贴板上,并从模型中删除它们

                3.2 如果有选择项,按Control-C键将选择项的副本放到应用程序的剪贴板上(而不是删除它们)

                        3.2.1 同一时间只能在剪贴板中包含一个项目集合;如果用户复制第二个选择,则丢弃第一个选择

                3.3 从剪贴板上按Control-V将剪贴板中项目的副本放入模型中

                        3.3.1 用户可以多次粘贴剪贴板中的项目

        优化:

                3.4 剪切和粘贴的操作应该是可撤销的

                3.5 被粘贴的项目在被粘贴时成为选中的; 不选择任何现有的选择

项目实现

实现剪切板功能

        实现方法:

        1.创建Clipboard类(剪切板类),用于存储剪切板的内容并提供添加剪切内容,粘贴等方法

        注意:该类中的Blob对象应该是单独复制出来,而不是简单的赋值进去,因为剪切板剪切的Blob与被剪切对象应该是两个对象,不然复制粘贴时操作可能是同一个Blob

        2.在InteractionModel.java类中添加剪切板,并添加设置与获取剪切板内容接口

        3.设置全局快捷键以及快捷键方法体

        4.优化:

                3.4 剪切和粘贴的操作应该是可撤销的

                3.5 被粘贴的项目在被粘贴时成为选中的; 不选择任何现有的选择

        实现:

                1.创建Clipboard类(剪切板类),用于存储剪切板的内容并提供添加剪切内容,粘贴等方法

                注意:该类中的Blob对象应该是单独复制出来,而不是简单的赋值进去,因为剪切板剪切的Blob与被剪切对象应该是两个对象,不然复制粘贴时操作可能是同一个Blob

                                                        BlobClipboard.java

public class BlobClipboard {

    private Blob blob;

    public BlobClipboard(){
        this.blob = new Blob();
    }

    public BlobClipboard(Blob blob) {
      	// 复制过程
        this.blob.setX(blob.getX());
        this.blob.setY(blob.getY());
        this.blob.setR(blob.getR());
    }

    public boolean isEmpty(){
        return blob == null;
    }

    public void addToClipboard(Blob blob){
      	// 复制过程
        this.blob.setX(blob.getX());
        this.blob.setY(blob.getY());
        this.blob.setR(blob.getR());
    }

    public Blob copy(){
//        随机生成
//        double randX = (Math.random()+0.1)*800,
//                randY = (Math.random()+0.1)*600;
//        this.blob.setX(randX);
//        this.blob.setY(randY);
        // 固定出现在右后方
        this.blob.setX(this.blob.getX() - 70);
        this.blob.setY(this.blob.getY() - 70);
        return blob;
    }
}

        2.在InteractionModel.java类中添加剪切板属性 ,并设置set/get方法

                                                InteractionModel.java

public class InteractionModel {
    List<IModelListener> subscribers;
    Blob selected;
    // 剪切板
    BlobClipboard blobClipboard;
    Stack<BlobAction> undoStack = new Stack<BlobAction>();
    Stack<BlobAction> redoStack = new Stack<BlobAction>();
    public BlobClipboard getBlobClipboard() {
        return blobClipboard;
    }
    public void setBlobClipboard(BlobClipboard blobClipboard) {
        this.blobClipboard = blobClipboard;
    }
}

        3.设置全局快捷键以及快捷键方法体

        1.设置全局快捷键方法和part2中的一样,就是再添加几个

                                                        HelloApplication.java

public void setShortCuts(Scene scene, MainUI uiRoot){
        // ctrl_Z 撤销
        KeyCombination ctrl_z = new KeyCodeCombination(KeyCode.Z, KeyCombination.CONTROL_DOWN);
        scene.getAccelerators().put(ctrl_z, () -> {
            uiRoot.getController().handleUndo();
        });

        // ctrl_R 重做
        KeyCombination ctrl_R = new KeyCodeCombination(KeyCode.R, KeyCombination.CONTROL_DOWN);
        scene.getAccelerators().put(ctrl_R, () -> {
            uiRoot.getController().handleRedo();
        });

        // ctrl_X 剪切
        KeyCombination ctrl_X = new KeyCodeCombination(KeyCode.X, KeyCombination.CONTROL_DOWN);
        scene.getAccelerators().put(ctrl_X, () -> {
            uiRoot.getController().handleCut();
        });

        // ctrl_C 复制
        KeyCombination ctrl_C = new KeyCodeCombination(KeyCode.C, KeyCombination.CONTROL_DOWN);
        scene.getAccelerators().put(ctrl_C, () -> {
            uiRoot.getController().handleCopy();
        });

        // ctrl_V 剪切
        KeyCombination ctrl_V = new KeyCodeCombination(KeyCode.V, KeyCombination.CONTROL_DOWN);
        scene.getAccelerators().put(ctrl_V, () -> {
            uiRoot.getController().handlePaste();
        });
    }

        2.添加快捷键方法

                CTRL_X:将当前选中的圆添加到剪切板中并删除

                CTRL_C:将当前选中的圆添加到剪切板中

                CTRL_X:将剪切板中保存的对象再添加到页面中

                                                                BlobController.java        

  	public void handleCut() {
      	// Ctrl_X
        iModel.getBlobClipboard().addToClipboard(iModel.getSelected());
        model.deleteBlobs(iModel.getSelected());
    }

    public void handleCopy(){
      	// Ctrl_C
        iModel.getBlobClipboard().addToClipboard(iModel.getSelected());
    }

    public void handlePaste(){
				// Ctrl_V
        Blob blob = iModel.getBlobClipboard().copy();
        Blob addBlob = model.addBlob(blob.getX(), blob.getY(), blob.getR());
    }

        4.优化:

                3.4 剪切和粘贴的操作应该是可撤销的

                3.5 被粘贴的项目在被粘贴时成为选中的; 不选择任何现有的选择

        方法:

                3.4 就是将剪切时的删除动作和粘贴时的新增操作注册到撤销栈中

                3.5 就是将粘贴时新创建的对象选中即可

        代码:

                                                                BlobController.java

public void handleCut() {
        iModel.getBlobClipboard().addToClipboard(iModel.getSelected());
        model.deleteBlobs(iModel.getSelected());
      	//  将剪切时的删除动作注册到撤销栈中
        iModel.registerUndoStack(new BlobAction(iModel.getSelected(),"DELETE"));
    }

    public void handleCopy(){
        iModel.getBlobClipboard().addToClipboard(iModel.getSelected());
    }

    public void handlePaste(){
        Blob blob = iModel.getBlobClipboard().copy();
        Blob addBlob = model.addBlob(blob.getX(), blob.getY(), blob.getR());
      	// 将粘贴时的新增操作注册到撤销栈中
        iModel.registerUndoStack(new BlobAction(addBlob,"CREATE"));
      	// 就是将粘贴时新创建的对象选中即可
        iModel.setSelected(addBlob);
    }

到此为止,第三部分的需求完成。

鼠标操作基本练习,方便初次接触电脑人掌握鼠标使用鼠标操作基本练习,方便初次接触电脑人掌握鼠标使用鼠标操作基本练习,方便初次接触电脑人掌握鼠标使用鼠标操作基本练习,方便初次接触电脑人掌握鼠标使用鼠标操作基本练习,方便初次接触电脑人掌握鼠标使用鼠标操作基本练习,方便初次接触电脑人掌握鼠标使用鼠标操作基本练习,方便初次接触电脑人掌握鼠标使用鼠标操作基本练习,方便初次接触电脑人掌握鼠标使用鼠标操作基本练习,方便初次接触电脑人掌握鼠标使用鼠标操作基本练习,方便初次接触电脑人掌握鼠标使用鼠标操作基本练习,方便初次接触电脑人掌握鼠标使用鼠标操作基本练习,方便初次接触电脑人掌握鼠标使用鼠标操作基本练习,方便初次接触电脑人掌握鼠标使用鼠标操作基本练习,方便初次接触电脑人掌握鼠标使用鼠标操作基本练习,方便初次接触电脑人掌握鼠标使用鼠标操作基本练习,方便初次接触电脑人掌握鼠标使用鼠标操作基本练习,方便初次接触电脑人掌握鼠标使用鼠标操作基本练习,方便初次接触电脑人掌握鼠标使用鼠标操作基本练习,方便初次接触电脑人掌握鼠标使用鼠标操作基本练习,方便初次接触电脑人掌握鼠标使用鼠标操作基本练习,方便初次接触电脑人掌握
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值