绘制简单的形状 - > JavaFX的paint方法和接口

时间:2016-09-26 14:16:11

标签: java javafx interface

我正在为学校做作业,我无法理解我需要用来解决这个问题的逻辑。我希望你们中的一些人能指出我正确的方向 我有一些类来绘制简单的形状:

类图1
Class Diagram 1

扩展类图
Extended Class Diagram

根据作业,DrawingItem下的每个延迟课程都需要paint()方法才能绘制与{OvalSpline等相关的特定内容。{{ {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

我遇到的主要问题是:

  1. 我是否正确使用形状子类中的strokeOval( oval.getHeight(), oval.getWidth(), oval.getAnchor().getX(), oval.getAnchor().getY() ); 方法,如果是这样,我如何从JavaFX方面调用它们?
  2. 我怎样才能实现" paint()paint(paintable:IPaintable)类中的Drawing方法?

2 个答案:

答案 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类中初始化的画布。我似乎无法弄清楚如何做到这一点。我在尝试使用绘图项目时通过列表添加它们但这似乎不起作用(或者我处理错误)。