gpt4 book ai didi

java - 如何使用 Java Swing 实现责任链

转载 作者:行者123 更新时间:2023-11-30 05:22:06 24 4
gpt4 key购买 nike

我的任务是创建一个简单的绘图应用程序,可以使用 Java Swing 和 MVC 绘制带有所选边框和填充颜色的基本形状(椭圆形、线条、矩形)。

模型的形状部分是使用复合模式实现的。要实现的功能是绘图(这已经由形状类本身处理)、调整大小、移动和删除形状,我应该使用责任链(CoR)模式来完成此任务。

CoR 在理论上对我来说很有意义,但我很难掌握如何应用它来实现实践中的功能。据我所知,当我单击绘图面板时,程序应该识别选择了哪个形状,然后我可以实现调整大小、移动、删除的方法。

所以我需要建议的是:

1)如何在这里实际实现 CoR 模式?

2)实现调整大小、移动、删除功能的好方法是什么?在自己的具体处理程序类中,作为形状类中的方法,其他?

非常感谢您的帮助。

最佳答案

这里是建议的 CoR 基本实现。
为了便于使用,以下代码是一个文件 mre :可以将整个代码复制粘贴到 ShapeManipulator.java 中并运行:

public class ShapeManipulator {

public static void main(String[] args) {
Shape s1 = new Shape();
Shape s2 = new Shape();
Shape s3 = new Shape();

ShapeManipulationBase move = new MoveHandler();
ShapeManipulationBase resize = new ResizeHandler();
ShapeManipulationBase delete = new DeleteHandler();

move.setXparam(50).setYparam(25).handle(s1);
resize.setXparam(100).setYparam(250).handle(s1);
resize.setXparam(200).setYparam(20).handle(s2);
delete.handle(s3);
}
}

//CoR basic interface
interface ShapeManipulationHandler {
void handle(Shape shape);
}

//base class allows swtting of optional x, y parameters
abstract class ShapeManipulationBase implements ShapeManipulationHandler {

protected int Xparam, Yparam;

//setters return this to allow chaining of setters
ShapeManipulationBase setXparam(int xparam) {
Xparam = xparam;
return this;
}

ShapeManipulationBase setYparam(int yparam) {
Yparam = yparam;
return this;
}

@Override
public abstract void handle(Shape shape) ;
}

class MoveHandler extends ShapeManipulationBase {

@Override
public void handle(Shape shape) {
System.out.println("Moving "+ shape + " by X="+ Xparam + " and Y="+ Yparam);
}
}

class ResizeHandler extends ShapeManipulationBase {

@Override
public void handle(Shape shape) {
System.out.println("Resizing "+ shape + " by X="+ Xparam + " and Y="+ Yparam);
}
}

class DeleteHandler extends ShapeManipulationBase {

@Override
public void handle(Shape shape) {
System.out.println("Deleting "+ shape);
}
}

class Shape{
private static int shapeCouner = 0;
private final int shapeNumber;

Shape() {
shapeNumber = ++shapeCouner;
}

@Override
public String toString() {
return "Shape # "+shapeNumber;
}
}

关于java - 如何使用 Java Swing 实现责任链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59369399/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com