当前位置: 首页 > 知识库问答 >
问题:

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

韩寂离
2023-03-14

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

根据赋值,DrawingItem下的每个延迟类都需要一个画()方法才能画特定的(OvalSplineetc...)独立于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
     );`
}

扩展类图显示了一个接口 IPaintable,我为每个形状创建了一个方法。JavaFX端(DrawingTool)实现了这个接口及其所有方法。这些方法希望 shape 对象作为参数。我使用这些方法在javaFX中绘制形状,再次是椭圆形示例:

strokeOval(
    oval.getHeight(), oval.getWidth(), oval.getAnchor().getX(), oval.getAnchor().getY()
);

我的主要问题是:

  1. shape子类中的<code>paint()
  2. 如何在<code>Drawing方法

共有2个答案

昌和悦
2023-03-14

感谢fabian,他为我指出了这个方向,真的帮了我很多忙(因为清理了我的文章,提高了可读性)。现在我已经实现了这些指针,它们似乎很有效。使用Drawingtool中的draw()方法,我调用Drawing类中的paint(IPaintable paintable)方法,该方法循环遍历该类中的drawingitems列表,如下所示:

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 类中初始化的画布中。我似乎不知道如何做到这一点。我试图在使用绘图项浏览列表时添加它们,但这似乎不起作用(或者我处理错了)。

岳佐
2023-03-14

类图中有两种设计模式易于识别:

IPaintable应该是GUI绘制操作的包装器(Facade),允许您独立于所使用的GUI库使用类图1中的类。您只应在绘画方法中使用 IPaintable 提供的方法。

类图1中的类是命令模式的命令部分;DrawingTool是调用者/客户端,IPaintable是接收器。

DrawingTool类应该包含这样的代码:

IPaintable paintable = new JavaFXPaintable(canvas.getGraphicsContext());

并像这样使用它,如果需要重新绘制绘图:

drawing.paint(paintable);

由于可以使用IPaintable的方法绘制椭圆形,因此它应该实现如下画:

public void paint(IPaintable paintable) {
    paintable.setColor(color);
    paintable.paintOval(this);
}

Polygon将使用ipainablepaintLinemethods传递给它的paint,用于绘制本身,drawing。绘制将清除i可维护并绘制所有等。

在<code>JavaFxPaintable

public void paintOval(Oval oval) {
    Point anchor = oval.getAnchor();
    graphics.strokeOval(anchor.getX(), anchor.getY(), oval.getWidth(), oval.getHeight());
}

若<code>锚

 类似资料:
  • 使用直线段工具绘制直线段 当您需要一次绘制一条直线段时请使用直线段工具。有关使用直线段工具的视频,请参阅 www.adobe.com/go/vid0036_cn。 1 选择直线段工具 。 2 执行下列操作之一: 将指针定位到希望线段开始的地方,然后拖动到希望线段终止的地方。 在希望线段开始的地方单击,并指定线的长度和角度。如果您希望以当前填充颜色对线段填色,请选择 “线段填色 ”。然后单击 “确定

  • 通过 Entity 添加形状 先来看一个添加立方体的例子 var viewer = new Cesium.Viewer('cesiumContainer'); var redBox = viewer.entities.add({ name : 'Red box with black outline', position: Cesium.Cartesian3.fromDegrees(-107

  • 绘制矩形 与其它图形库不同,LCUI 提供的图形 API 只支持矩形这一种形式的图形绘制,不支持基于路径来绘制复杂图形。因此,对于其它复杂的图形,你需要手动编写代码填充像素来绘制。 LCUI 提供了一种绘制矩形的方法: int Graph_FillRect(LCUI_Graph *graph, LCUI_Color color, LCUI_Rect *rec

  • 问题内容: 我有一个包含3个JPanel的JFrame;选项,菜单,画布。在选项中,有许多表示形状的JButton。目的是单击形状(例如矩形)的JButton,然后在画布上单击任意位置,然后将在此处绘制形状。由于某种原因,形状并不总是被绘制,仅当我单击画布左上方区域中的某个位置时才绘制形状。此外,形状似乎会随我单击的位置而随机改变大小。 这是我的一些代码片段,这可能是一个小错误,但是我似乎找不到它

  • 我试图用DXUT11画一个简单的三角形,但是我在窗口中看不到三角形。 我努力工作,但仍然找不到问题所在-_- 我检查了D3D函数的每个返回值,它们都返回了S_OK<我可以看到我的窗口显示出来,背景色是我设置为清除窗口的颜色,因此看起来d3d设备是当前创建的,并且后缓冲区被渲染到窗口,但是黄色三角形在哪里 T\u T。。。。。。。。。。。。。。。 我的代码如下:(为了简化问题,我已经删除了所有的检查

  • 绘制直线 当您需要一次绘制一条直线段时请使用直线段工具。有关帮助您学习如何使用“直线段”工具的学习游戏,请观看如何使用直线工具。 选择直线段工具 。 执行下列操作之一: 将指针定位到希望线段开始的地方,然后拖动到希望线段终止的地方。 单击希望线段开始的地方。在对话框中,指定线段的长度和角度。如果您希望以当前填充颜色对线段填色,请选择线段填色。然后,单击确定。直线段工具选项 绘制弧线 单击并按住直线