我正在为学校做作业,我无法理解我需要用来解决这个问题的逻辑。我希望你们中的一些人能指出我正确的方向 我有一些类来绘制简单的形状:
根据作业,DrawingItem
下的每个延迟课程都需要paint()
方法才能绘制与{Oval
,Spline
等相关的特定内容。{{ {1}}。对于GraphicsContext
,我的猜测是这种方法类似于:
Oval
扩展类图显示了我使用每种形状的方法创建的接口public void paint(Graphics g){
g.setColor(super.getColor());
g.drawOval(
(int) dw.getAnchor().getX(), (int) dw.getAnchor().getY(),
(int)this.width, (int)this.height
);`
}
。 JavaFX端(IPaintable
)实现了此接口及其所有方法。这些方法希望shape对象作为参数。我使用这些方法在javaFX中绘制形状,再次是椭圆形示例:
DrawingTool
我遇到的主要问题是:
strokeOval(
oval.getHeight(), oval.getWidth(), oval.getAnchor().getX(), oval.getAnchor().getY()
);
方法,如果是这样,我如何从JavaFX方面调用它们?paint()
和paint(paintable:IPaintable)
类中的Drawing
方法? 答案 0 :(得分:1)
在类图中可以轻松识别出两种设计模式:
IPaintable
应该是GUI绘图操作的包装器(Facade),允许您独立于所使用的GUI库使用 Class Diagram 1 中的类。您应该只使用IPaintable
方法中paint
提供的方法。
Class Diagram 1 中的类是Command Pattern的命令部分; DrawingTool
是调用者 / 客户端,IPaintable
是接收者。
DrawingTool
类应包含如下代码:
IPaintable paintable = new JavaFXPaintable(canvas.getGraphicsContext());
如果需要重新绘制图形,并像这样使用它:
drawing.paint(paintable);
paint
方法由于可以使用Oval
的方法绘制IPaintable
,因此应该像这样实现paint
:
public void paint(IPaintable paintable) {
paintable.setColor(color);
paintable.paintOval(this);
}
Polygon
会使用传递给paintLine
方法IPaintable
的{{1}}方法来绘制自己,paint
会清除Drawing.paint
并绘制所有它IPaintable
等。
在items
中,JavaFxPaintable
方法将实现如下:
paintOval
如果public void paintOval(Oval oval) {
Point anchor = oval.getAnchor();
graphics.strokeOval(anchor.getX(), anchor.getY(), oval.getWidth(), oval.getHeight());
}
表示左上角而不是中心,则可能需要稍微修改一下。
答案 1 :(得分:0)
谢谢fabian,指点我这个方向真的很有帮助(因为清理我的帖子以便于阅读)。 现在我已经实现了这些指针,它们似乎有效。使用Drawingtool中的draw()方法,我在Drawing类中调用paint(IPaintable paintable)方法,该方法循环遍历此类中的drawitems列表,如下所示:
public void paint(IPaintable paintable){
for (DrawingItem test : drawingitems){
if (test instanceof Oval){
paintable.paintOval((Oval) paintable);
} else if (test instanceof Image){
paintable.paintImage((Image) paintable);
这应该绘制形状并且似乎有效。最后一部分是将它们添加到在DrawingTool类中初始化的画布。我似乎无法弄清楚如何做到这一点。我在尝试使用绘图项目时通过列表添加它们但这似乎不起作用(或者我处理错误)。