首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从ViewModel TornadoFX绘制线条

ViewModel是一种设计模式,用于将视图(View)和模型(Model)之间的数据交互进行解耦。在TornadoFX框架中,ViewModel用于管理视图的数据和状态,并提供了一些方便的方法来处理数据绑定和事件处理。

绘制线条是一种常见的图形操作,可以在图形界面中实现各种绘图功能。在TornadoFX中,可以使用Canvas组件来实现线条的绘制。Canvas是一个可绘制的区域,可以通过在其上绘制图形来实现各种效果。

以下是使用ViewModel和TornadoFX绘制线条的步骤:

  1. 创建一个继承自ViewModel的类,用于管理线条的数据和状态。可以在ViewModel中定义线条的起点坐标、终点坐标、线条颜色等属性,并提供相应的getter和setter方法。
  2. 在视图(View)中,使用bind方法将ViewModel中的属性与界面上的控件进行绑定。例如,可以将起点坐标和终点坐标与两个文本框进行绑定,将线条颜色与一个颜色选择器进行绑定。
  3. 在视图中,使用Canvas组件来实现线条的绘制。可以通过监听鼠标事件,在鼠标按下和释放时获取起点坐标和终点坐标,并将其传递给ViewModel进行处理。
  4. 在ViewModel中,可以使用GraphicsContext对象来进行线条的绘制。可以通过调用GraphicsContext的方法,如moveTo、lineTo和setStroke等,来设置线条的起点、终点和颜色。
  5. 可以在视图中添加按钮或其他控件,用于触发线条的绘制操作。可以通过监听按钮的点击事件,在事件处理函数中调用ViewModel中的方法来实现线条的绘制。

以下是一个示例代码,演示了如何使用ViewModel和TornadoFX绘制线条:

代码语言:kotlin
复制
import javafx.scene.paint.Color
import tornadofx.*

class LineViewModel : ViewModel() {
    val startXProperty = doubleProperty()
    var startX by startXProperty

    val startYProperty = doubleProperty()
    var startY by startYProperty

    val endXProperty = doubleProperty()
    var endX by endXProperty

    val endYProperty = doubleProperty()
    var endY by endYProperty

    val lineColorProperty = objectProperty<Color>()
    var lineColor by lineColorProperty

    fun drawLine(graphicsContext: GraphicsContext) {
        graphicsContext.stroke = lineColor
        graphicsContext.lineWidth = 2.0
        graphicsContext.strokeLine(startX, startY, endX, endY)
    }
}

class LineView : View() {
    val lineViewModel: LineViewModel by inject()

    override val root = vbox {
        val canvas = canvas(width = 400.0, height = 400.0)
        val graphicsContext = canvas.graphicsContext2D

        bind(lineViewModel.startXProperty, canvas.setOnMousePressed { lineViewModel.startX = it.x })
        bind(lineViewModel.startYProperty, canvas.setOnMousePressed { lineViewModel.startY = it.y })
        bind(lineViewModel.endXProperty, canvas.setOnMouseReleased { lineViewModel.endX = it.x })
        bind(lineViewModel.endYProperty, canvas.setOnMouseReleased { lineViewModel.endY = it.y })

        hbox {
            label("Line Color:")
            colorpicker().bind(lineViewModel.lineColorProperty)
        }

        button("Draw Line") {
            action { lineViewModel.drawLine(graphicsContext) }
        }
    }
}

class LineApp : App(LineView::class)

fun main() {
    launch<LineApp>()
}

在上述示例中,LineViewModel类管理了线条的起点坐标、终点坐标和线条颜色。LineView类是视图类,使用Canvas组件来实现线条的绘制,并通过bind方法将Canvas的鼠标事件与ViewModel中的属性进行绑定。通过监听按钮的点击事件,调用ViewModel中的drawLine方法来实现线条的绘制。

这是一个简单的示例,你可以根据实际需求进行扩展和优化。在实际应用中,你可以根据具体的业务需求,使用TornadoFX提供的其他功能和组件来实现更复杂的绘图功能。

腾讯云提供了一系列的云计算产品,包括云服务器、云数据库、云存储等,可以满足各种不同的需求。你可以根据具体的业务需求选择适合的产品进行开发和部署。具体的产品介绍和文档可以在腾讯云官网上找到。

参考链接:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

canvas简单线条绘制

下面先来看一下线条绘制代码,烧我在详细说明     线条绘制代码: <script type="text...cv.lineTo(90,188); cv.stroke(); cv.lineTo(0,0); cv.stroke(); 1.<em>绘制</em><em>线条</em>之前首先进行声明<em>线条</em>开始<em>绘制</em>代码...3.开始定义<em>线条</em>末端的位置context.lineTo(left,top),<em>线条</em>终点的位置 4.在此开始定义<em>线条</em>的颜色,<em>线条</em>的粗细context.strokeStyle和context.lineWidth...等属性,看到这你可能要说了,上面的代码定义的<em>线条</em>颜色,宽度在绘画<em>线条</em>的前面即beginPath()之前,这里说明一下这种属性只有在<em>线条</em>路径闭合之前都是生效的. 5.开始连接两点,闭合路径context.stroke...()一个完整的<em>线条</em><em>绘制</em>完毕!

88020

WPF 绘制对齐像素的清晰显示的线条

线条!这是 3 像素的线条: ? 然而论其原因,就是因为我们屏幕太渣~哦~不,是因为绘制线条没有与屏幕像素对齐,具体来说是视觉对象(Visual)的位置不在整数像素上或尺寸不是整数像素。...而与此同时屏幕的点距又太大以至于我们看出来绘制线条和屏幕像素之间的差异。 然而为什么 WPF 不默认为我们对齐像素呢?...事实上我们 .NET Framework 源码可以得知,UseLayoutRounding 实际只处理 UI 元素对自己子级控件的布局取整。...你希望能够绘制 1 像素的线条,实际上它会让你有时看得见 1 像素线条,有时看的是 2 像素线条,有时居然完全看不见!!!...如果图形比较复杂,比如绘制表格或者其它各种交叉了线条的图形,那么使用 DrawingContext 绘制,并设置 GuidelineSet 对齐。

1.4K10

问与答60: 怎样使用矩阵数据在工作表中绘制线条

学习Excel技术,关注微信公众号: excelperfect 本文来源于wellsr.com的Q&A栏目,个人觉得很有意思,对于想要在工作表中使用形状来绘制图形的需求比较具有借鉴意义,特辑录于此,代码稍有修改...Q:如下图1所示,左侧是一个4行4列的数值矩阵,要使用VBA根据这些数值绘制右侧的图形。 ?...图1 绘制规则是这样的:找到最小的数值(忽略0),将其与第2小的数值用点划线连接,再将第2小的数值与第3小的数值用点划线连接,依此类推,直到连接到最大的数值。...MyArray(i) MyArray(i) = Temp End If Next j Next i End Sub '从一个单元格中心绘制到另一个单元格中心的线条...dwidth1 / 2, dtop1 + dheight1 / 2, _ dleft2+ dwidth2 / 2, dtop2 + dheight2 / 2).Select '格式化线条

2.4K30

AI干货-Adobe illustrator羽毛状的线条如何绘制【附安装包】

这款软件为用户们提供了非常多的 图片编辑 工具和 绘画 工具,满足用户们的不同图像处理需求,软件的绘画功能十分的强大,你可以直接通过绘画工具制作出自己想要的图片,就比如今天小编在身边AI大神的指导下新学会的羽毛状线条绘制方法...打开AI,新建画布,大小随意   选择工具栏中的“ 弧形工具 ”   鼠标移至画布中,鼠标单击一下定点,在不松手的情况下拖动鼠标,就会绘制一个弧线, 在绘制中按住空格可以自由移动   在画布中单击绘制图形...,在不松手时 按F键 ,可以改变图形的方向-相反方向   在绘制图形时,不松手状态下按字母C,可以形成闭合路径,再次按C,取消闭合路径   在绘制图形时, 不松手状态下按方向键↑↓箭头 ,可以改变圆弧的弧度...  在绘制图形时,不 松手状态下按“~”键 ,同时拖动鼠标移动位置,可以绘制多个圆弧。

68520

线条艺术到DIY实现一个网状体Net的js库

线条这种设计元素,被许多设计师所喜爱,比如用线条串联文字跟图案: 还有,线描插画: 更有创意的图标: 还有ACELAND人工智能设计师,创作的gif图: 设计师对线条对运用是娴熟、喜爱、富有创造力的。...: init: 1 通过createPoints,根据传入的option参数,生成粒子群; 2 通过clear,初始化canvas,比如设置背景色,清除画布上的其他元素; 3 通过drawPoints绘制粒子群...就可以形成一下效果: 其中,movePoints有2点需要注意,我们需要通过moveArea及movePoint,两个方法移动每个粒子,并判断粒子的移动方向,更新完粒子的位置之后,再次调用drawPoints绘制出所有粒子...根据移动方向,更新粒子的坐标: 3 升级版本: +渐变色 修改connectPoints方法里的颜色,如下: +线宽变化 同样,修改connectPoints方法,增加一个中点的坐标: 绘制直线变为绘制一个三角形...+多种线条颜色 在createPoints的时候,给不同的point设置不同的线条颜色,然后在connectPoints的时候,根据point的线条颜色,画出线条即可。 以上为全文内容。

1.2K60

零学习OpenCV 4】图像直方图绘制

经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍《零学习OpenCV 4》。...在OpenCV 4中只提供了图像直方图的统计函数calcHist(),该函数能够统计出图像中每个灰度值的个数,但是对于直方图的绘制需要使用者自行绘制。...nimages:输入的图像数量 channels:需要统计的通道索引数组,第一个图像的通道索引0到images[0].channels()-1,第二个图像通道索引images[0].channels...在程序中我们首先使用calcHist()函数统计灰度图像里面每个灰度值的数目,之后通过不断绘制矩形的方式实现直方图的绘制。...由于图像中部分灰度值像素数目较多,因此我们将每个灰度值数目缩小了20倍后再进行绘制绘制的直方图在图4-1中所示。

95920

零学习OpenCV 4】绘制几何图形

经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍《零学习OpenCV 4》。...1 01 绘制圆形 圆形是我们在平时中最常使用的图形之一,OpenCV 4中提供了circle()函数用于绘制圆型,其函数的函数原型在代码清单3-40中给出。...1 02 绘制直线 接下来介绍如何在图像中绘制直线。OpenCV 4中提供了line()函数用于绘制直线,其函数原型在代码清单3-41中给出。 代码清单3-41 line()函数原型 1....通过椭圆弧起始和终止角度,可以绘制完整的椭圆或者一部分椭圆弧。与circle()函数一致,当边界线的厚度值为负数的时候,将绘制一个实心的椭圆。...1 04 绘制多边形 在几何中多边形也是一个重要的成员,而多边形中矩形又是一个比较特殊的类型,因此OpenCV 4中除了提供绘制多边形的函数fillPoly()外,也提供了绘制矩形的函数rectangle

1.3K30
领券