{"id":106196,"date":"2020-08-04T07:00:29","date_gmt":"2020-08-04T04:00:29","guid":{"rendered":"https:\/\/www.javacodegeeks.com\/?p=106196"},"modified":"2020-08-03T16:45:59","modified_gmt":"2020-08-03T13:45:59","slug":"creating-a-cad-application-in-java-javafx","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/2020\/08\/creating-a-cad-application-in-java-javafx.html","title":{"rendered":"Creating A CAD Application In Java (JavaFX)"},"content":{"rendered":"<p>A few days ago I finished a CAD application whose purpose is to calculate the energy efficiency of Dwellings (or multiple Dwellings). It can be seen as an application similar to Autocad (which is used in Civil Engineering, Architecture, etc) but with the specific purpose to do energy efficiency assessment.<\/p>\n<p>After about 1 year of development, me and my client (he himself an energy rater) were able to finish the project within a much smaller time frame and a much smaller budget than other similar projects from competing companies. It wouldn\u2019t be an exaggeration to say that its cost was about 30 times less and it took at least less than half the time.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/showcase-model-view-1024x555-2.png\" alt=\"\" class=\"wp-image-106203\" width=\"768\" height=\"416\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/showcase-model-view-1024x555-2.png 1024w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/showcase-model-view-1024x555-2-300x163.png 300w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/showcase-model-view-1024x555-2-768x416.png 768w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/><figcaption>Screenshot of CAD application<\/figcaption><\/figure>\n<\/div>\n<p>The feedback and reception to our application has gone much beyond what we expected even though the application is still in Beta.<\/p>\n<h2 class=\"wp-block-heading\">Background<\/h2>\n<p>My responsibility in this project was to define the higher level architecture, do the implementation, User Interface Design and User Experience and all the aspects of setting up a professional environment and workflow for developing a software application.<\/p>\n<p>My client, Nick, an energy rater by profession, has always been pushing energy rating to a higher level. He\u2019s done the energy ratings for several buildings including commercial, public and residential. Some of them award winning projects. As a self-taught, amateur programmer he also helped implement the application.<\/p>\n<p>The purpose of the tool, called HERO, is to do the energy efficiency assessment of buildings and in the end generate an energy rating certificate. These certificates are mandatory and every building must meet a minimum value of energy efficiency. Applications that have this purpose must be certified by a public entity (ours already is) and the professional doing the energy rating must himself be a certified energy rater (having completed an accredited course with success).<\/p>\n<h2 class=\"wp-block-heading\">High level view<\/h2>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/showcase-model-view2-1024x555-2.png\" alt=\"\" class=\"wp-image-106205\" width=\"768\" height=\"416\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/showcase-model-view2-1024x555-2.png 1024w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/showcase-model-view2-1024x555-2-300x163.png 300w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/showcase-model-view2-1024x555-2-768x416.png 768w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/><figcaption>Model View<\/figcaption><\/figure>\n<\/div>\n<p>If you follow my blog, you\u2019ve probably noticed from the picture that the application is using <a href=\"https:\/\/www.pixelduke.com\/java-javafx-theme-jmetro\/\" target=\"_blank\" rel=\"noreferrer noopener\">JMetro<\/a>.<\/p>\n<p>The picture above is from the Model view. In this view you create the project and enter all its data. The pane to the left is where you can view the visuals, and create the floor plan (visually). The pane to the right is the Datagrid where you see and enter data for all the objects of the project (walls, windows, floors, top lights, etc) in a table like format. All these views are inside a Dockpane like container that allows you to resize, restore and maximize each pane.<\/p>\n<p>There are also other views, inside the Model view, not shown in the picture. Like the library where you can create and manage the materials that you can use throughout your project, your custom assemblies for walls, the different types of windows, etc..<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/showcase-results-view-1024x555-2.png\" alt=\"\" class=\"wp-image-106207\" width=\"768\" height=\"416\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/showcase-results-view-1024x555-2.png 1024w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/showcase-results-view-1024x555-2-300x163.png 300w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/showcase-results-view-1024x555-2-768x416.png 768w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/><figcaption>Results View<\/figcaption><\/figure>\n<\/div>\n<p>After you run the simulation, you can also see the results of your energy efficiency modelling (picture above). The Results View shows a dashboard, with charts, tables, etc, that lets the user view at a glance how efficient the dwelling or dwellings are and quickly notice what might need to be readjusted.<\/p>\n<h2 class=\"wp-block-heading\">Details and a few features<\/h2>\n<p>The calculations for the energy rating can get really complex. They can depend on a multitude of factors. To name a few:<\/p>\n<ol class=\"wp-block-list\">\n<li>The materials used. There\u2019s a huge database of materials that can be used in Floors, Ceilings, Walls, etc. And the user can also, for instance, create his own custom assembly for Walls defining their list of materials in a specified order (from inside to the outside).<\/li>\n<li>Size and layout of the building\u2019s areas.<\/li>\n<li>Climate over the year in the area where the building is located.<\/li>\n<li>Orientation of the building (influences how the Sun heats up each area).<\/li>\n<li>Shading of other buildings, fences, etc that are around the building;<\/li>\n<li>The building\u2019s penetrations.<\/li>\n<li>Top lights used, ceiling fans, exhaust fans, etc.<\/li>\n<li>Other factors.<\/li>\n<\/ol>\n<p>All the items mentioned are modeled and calculated in HERO.<div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<p>All the geometry, intersections, etc are also computed by the application. For instance, if you create a Zone in a level \u2013 a Zone can be a living room, kitchen, bedroom, etc \u2013 and then another smaller Zone in the level above, there will be an intersection. This intersection will produce a \u201chole\u201d in the ceiling of the level below, like a donut. Hero will realize automatically that the 2 zones are connected and will create a new Ceiling in the zone below (in the place of the donut) adjacent to the zone above.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/donut-step1-1024x555-1.jpg\" alt=\"\" class=\"wp-image-106208\" width=\"768\" height=\"416\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/donut-step1-1024x555-1.jpg 1024w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/donut-step1-1024x555-1-300x163.jpg 300w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/donut-step1-1024x555-1-768x416.jpg 768w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/><figcaption>1 \u2013 Create Zone<\/figcaption><\/figure>\n<\/div>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/donut-step2-1024x555-1.jpg\" alt=\"\" class=\"wp-image-106209\" width=\"768\" height=\"416\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/donut-step2-1024x555-1.jpg 1024w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/donut-step2-1024x555-1-300x163.jpg 300w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/donut-step2-1024x555-1-768x416.jpg 768w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/><figcaption>2 \u2013 Create another Zone on level above<\/figcaption><\/figure>\n<\/div>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/donut-step3-1024x555-1.jpg\" alt=\"\" class=\"wp-image-106210\" width=\"768\" height=\"416\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/donut-step3-1024x555-1.jpg 1024w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/donut-step3-1024x555-1-300x163.jpg 300w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/donut-step3-1024x555-1-768x416.jpg 768w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/><figcaption>3 \u2013 Geometry automatically split (new Ceiling created)<\/figcaption><\/figure>\n<\/div>\n<p>Shading objects are also calculated automatically, one Zone can cast a shade on another Zone placed elsewhere.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/auto-wingwall-step-1-1024x555-2.png\" alt=\"\" class=\"wp-image-106212\" width=\"768\" height=\"416\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/auto-wingwall-step-1-1024x555-2.png 1024w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/auto-wingwall-step-1-1024x555-2-300x163.png 300w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/auto-wingwall-step-1-1024x555-2-768x416.png 768w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/><figcaption>1 \u2013 Create Zone<\/figcaption><\/figure>\n<\/div>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/auto-wingwall-step-2-1024x555-1.png\" alt=\"\" class=\"wp-image-106213\" width=\"768\" height=\"416\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/auto-wingwall-step-2-1024x555-1.png 1024w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/auto-wingwall-step-2-1024x555-1-300x163.png 300w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/auto-wingwall-step-2-1024x555-1-768x416.png 768w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/><figcaption>2 \u2013 Create second Zone to the right<\/figcaption><\/figure>\n<\/div>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/auto-wingwall-step-3-1024x555-1.png\" alt=\"\" class=\"wp-image-106214\" width=\"768\" height=\"416\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/auto-wingwall-step-3-1024x555-1.png 1024w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/auto-wingwall-step-3-1024x555-1-300x163.png 300w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/auto-wingwall-step-3-1024x555-1-768x416.png 768w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/><figcaption>3 \u2013 Shading object automatically calculated and created<\/figcaption><\/figure>\n<\/div>\n<p>Another thing that HERO automatically computes are adjacencies between Walls and Zones. If you create a Zone right next to another, instead of creating 2 Walls between the Zones, the application will automatically figure out that the Zones are connected. It will connect the 2 zones by creating 1 internal Wall between them, which is different from an outside facing Wall.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/Internal-Wall-step-1-1024x555-1.png\" alt=\"\" class=\"wp-image-106216\" width=\"768\" height=\"416\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/Internal-Wall-step-1-1024x555-1.png 1024w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/Internal-Wall-step-1-1024x555-1-300x163.png 300w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/Internal-Wall-step-1-1024x555-1-768x416.png 768w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/><figcaption>1 \u2013 Create Zone<\/figcaption><\/figure>\n<\/div>\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/Internal-Wall-step-2-1024x555-1.png\" alt=\"\" class=\"wp-image-106217\" width=\"768\" height=\"416\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/Internal-Wall-step-2-1024x555-1.png 1024w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/Internal-Wall-step-2-1024x555-1-300x163.png 300w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/Internal-Wall-step-2-1024x555-1-768x416.png 768w\" sizes=\"(max-width: 768px) 100vw, 768px\" \/><figcaption>2 \u2013 Create another overlapping Zone<\/figcaption><\/figure>\n<p>For this post not to get too long, too tedious, and too technical I just pointed out some of the features of Hero, there are a lot more. I think you can get a general idea of Hero\u2019s features from what was mentioned above.<\/p>\n<h3 class=\"wp-block-heading\">Reception and feedback<\/h3>\n<p>Me and my client were surprised with the reception the application is getting. Given the application is still in Beta and that there are already 3 applications in the market, 2 of them well established, we were expecting a much more moderate reaction.<\/p>\n<p>Before 24 hours had passed since the release, we had already 50 registered users and 1 certificate issued. In our issue tracker, which has the purpose of only storing bug reports from our users, we were getting thanks messages.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" width=\"742\" height=\"256\" src=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/comentario-1.png\" alt=\"\" class=\"wp-image-106218\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/comentario-1.png 742w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/comentario-1-300x104.png 300w\" sizes=\"(max-width: 742px) 100vw, 742px\" \/><figcaption>Feedback messages<\/figcaption><\/figure>\n<\/div>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" width=\"734\" height=\"736\" src=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/comentario-2-1.png\" alt=\"\" class=\"wp-image-106220\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/comentario-2-1.png 734w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/comentario-2-1-300x300.png 300w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/comentario-2-1-150x150.png 150w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2020\/08\/comentario-2-1-70x70.png 70w\" sizes=\"(max-width: 734px) 100vw, 734px\" \/><figcaption>Feedback messages<\/figcaption><\/figure>\n<\/div>\n<h3 class=\"wp-block-heading\">Technology and form factor<\/h3>\n<p><em>Notice: I might be a bit biased because I\u2019ve been working with JavaFX (and Java) since the very first release. However, I\u2019m going to be as impartial as possible.<\/em><\/p>\n<p>If the requirements are to build a productivity application, the best option in my opinion is to go desktop native, instead of, for instance, doing a mobile app. Nothing beats a keyboard and a mouse in this area. Besides more precise and faster input, you can display much more content on screen without having to worry about the touch targets being too small for the fingers. This also means the user will be able to see more data on screen which will be important in a productivity application.<\/p>\n<p>As for \u201cnative\u201d vs web. Native allows for better performance, security, etc than a web application. Web has the advantage of higher availability (no required installations, all the user needs is a browser) but if you\u2019re building a performance demanding app, I think your best bet is to go native.<\/p>\n<p>Regarding the programming model, I tend to prefer Java (or any other object orientated, type safe language) and its framework and big collection of third party libraries than the web programming model. Especially when building complex applications.<\/p>\n<p>JavaFX (and Java) are a perfect fit in this type of scenario as JavaFX really shines in the Desktop world. HERO is currently running on Windows, which will probably be the majority of users for your desktop applications. But we can easily, with a few tweaks, support Mac as well and even Linux (though in our case there probably won\u2019t be many users using that O.S., if any).<\/p>\n<p>If, for some reason, we ever have a need to create a scaled-down mobile or tablet version or reuse some of our existing components in a mobile application, we can. Oracle and Gluon have been pushing hard for this, continuously working and making it better. Recently, by leveraging GraalVM, applications can be AOT compiled, benefiting from faster startup times and performance. This is also great for IOS, since IOS doesn\u2019t allow for JIT compilation.<\/p>\n<p>To be fair and to try to be impartial, I\u2019ll conclude this section with what, in my view, are some of downsides of JavaFX (currently):<\/p>\n<ul class=\"wp-block-list\">\n<li>Table API.<\/li>\n<li>Lack of tools to better debug CSS issues and try out CSS tweaks, like for instance having something like firebug (ScenicView is great for other purposes but not specifically for this one).<\/li>\n<li>Lack of support for some of the Web\u2019s CSS properties. Also one of my pet peeves is the fact that every property is prefixed with \u201c-fx-\u201d (I would prefer this would be dropped on properties that have the same behavior as the ones in Web CSS).<\/li>\n<li>IDE support for JavaFX CSS isn\u2019t great: error highlighting, etc (side note: I\u2019m using Intellij).<\/li>\n<li>JavaFX API is too closed and lacks better support for extension on some cases (classes that are final, classes with final methods, etc) regarding this issue I preferred Swing\u2019s more open API.<\/li>\n<li>Some Font rendering issues (this might only happen with some fonts and only on some platforms \u2013 Windows is worse than Mac).<\/li>\n<li>Better separation of concerns in JavaFX Controls. There was a plan a few years ago to make Behavior classes public, which would probably provide a better separation between the View, Controller and Model aspects of a Control. Right now it\u2019s a bit difficult to create a new Skin for an existing JavaFX SDK Control if your only requirement is to tweak some of its View aspects and when that can\u2019t be done through CSS. This often results in developers preferring to create a new Control altogether than providing a new Skin for an existing one which will mean more work and a higher degree of coupling with those Controls (for instance, you won\u2019t be able to easily switch between Skins). The fact that the API is often too closed also means that, usually, extending an existing Control isn\u2019t an option.<\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n<p>Despite being a quite complex application, I believe HERO was created in a record time. Not only that but the feedback from our users makes us feel the application fills a gap and that they are keen to start using it and pushing it to be the default tool for their company.<\/p>\n<p>I believe, having a good UX, features users have been dying to have, good, well structured code that lets you continuously evolve and better maintain what you already have and finally topping all that with a nice looking user interface, are the markers to a successful application. I think we\u2019ve been able to score high in all those markers.<\/p>\n<p>The choice of form factor and technology is also really important when building an application. I believe the right choice was done for this productivity application: going desktop native and choosing Java and JavaFX.<\/p>\n<p>With this being said, me, my client and our users feel this is just the beginning, that we\u2019re only scratching the surface and there\u2019s a lot of potential.<\/p>\n<div class=\"attribution\">\n<table>\n<tbody>\n<tr>\n<td>\n<p>Published on Java Code Geeks with permission by Pedro Duque Vieira, partner at our <a href=\"\/\/www.javacodegeeks.com\/join-us\/jcg\/\" target=\"_blank\" rel=\"noopener noreferrer\">JCG program<\/a>. See the original article here: <a href=\"https:\/\/pixelduke.com\/2020\/07\/27\/creating-a-cad-application-in-java-javafx\/\" target=\"_blank\" rel=\"noopener noreferrer\">Creating A CAD Application In Java (JavaFX)<\/a><\/p>\n<p>Opinions expressed by Java Code Geeks contributors are their own.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>A few days ago I finished a CAD application whose purpose is to calculate the energy efficiency of Dwellings (or multiple Dwellings). It can be seen as an application similar to Autocad (which is used in Civil Engineering, Architecture, etc) but with the specific purpose to do energy efficiency assessment. After about 1 year of &hellip;<\/p>\n","protected":false},"author":118,"featured_media":147,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[195],"class_list":["post-106196","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desktop-java","tag-javafx"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Creating A CAD Application In Java (JavaFX) - Java Code Geeks<\/title>\n<meta name=\"description\" content=\"Interested to learn about CAD Application? Check our article explaining in a tutorial how to create a CAD Application in java.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.javacodegeeks.com\/2020\/08\/creating-a-cad-application-in-java-javafx.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Creating A CAD Application In Java (JavaFX) - Java Code Geeks\" \/>\n<meta property=\"og:description\" content=\"Interested to learn about CAD Application? Check our article explaining in a tutorial how to create a CAD Application in java.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/2020\/08\/creating-a-cad-application-in-java-javafx.html\" \/>\n<meta property=\"og:site_name\" content=\"Java Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/javacodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2020-08-04T04:00:29+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/javafx-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Pedro Duque Vieira\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@p_duke\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Pedro Duque Vieira\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/08\\\/creating-a-cad-application-in-java-javafx.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/08\\\/creating-a-cad-application-in-java-javafx.html\"},\"author\":{\"name\":\"Pedro Duque Vieira\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/9039e8dfd941245cba4472141e054cd6\"},\"headline\":\"Creating A CAD Application In Java (JavaFX)\",\"datePublished\":\"2020-08-04T04:00:29+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/08\\\/creating-a-cad-application-in-java-javafx.html\"},\"wordCount\":1882,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/08\\\/creating-a-cad-application-in-java-javafx.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/javafx-logo.jpg\",\"keywords\":[\"JavaFX\"],\"articleSection\":[\"Desktop Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/08\\\/creating-a-cad-application-in-java-javafx.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/08\\\/creating-a-cad-application-in-java-javafx.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/08\\\/creating-a-cad-application-in-java-javafx.html\",\"name\":\"Creating A CAD Application In Java (JavaFX) - Java Code Geeks\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/08\\\/creating-a-cad-application-in-java-javafx.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/08\\\/creating-a-cad-application-in-java-javafx.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/javafx-logo.jpg\",\"datePublished\":\"2020-08-04T04:00:29+00:00\",\"description\":\"Interested to learn about CAD Application? Check our article explaining in a tutorial how to create a CAD Application in java.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/08\\\/creating-a-cad-application-in-java-javafx.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/08\\\/creating-a-cad-application-in-java-javafx.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/08\\\/creating-a-cad-application-in-java-javafx.html#primaryimage\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/javafx-logo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/javafx-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/08\\\/creating-a-cad-application-in-java-javafx.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Desktop Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\\\/desktop-java\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Creating A CAD Application In Java (JavaFX)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"name\":\"Java Code Geeks\",\"description\":\"Java Developers Resource Center\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"alternateName\":\"JCG\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.javacodegeeks.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/javacodegeeks\",\"https:\\\/\\\/x.com\\\/javacodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/9039e8dfd941245cba4472141e054cd6\",\"name\":\"Pedro Duque Vieira\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/955cea179abb367633246f89136ff298a72c455f630601e27f2019dd7fe6c529?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/955cea179abb367633246f89136ff298a72c455f630601e27f2019dd7fe6c529?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/955cea179abb367633246f89136ff298a72c455f630601e27f2019dd7fe6c529?s=96&d=mm&r=g\",\"caption\":\"Pedro Duque Vieira\"},\"description\":\"JavaFX and Swing, Freelancer and Consultant specialized in creating User Interfaces. Has been working as a front end consultant and has been developing web, native and cross platform since 2006. Holder of a master degree in Computer Science, he's permanently studying and taking courses in User Interface Design and User Experience. Owner of the software company Pixel Duke.\",\"sameAs\":[\"https:\\\/\\\/www.pixelduke.com\",\"http:\\\/\\\/pt.linkedin.com\\\/pub\\\/pedro-duque-vieira\\\/8\\\/403\\\/264\",\"https:\\\/\\\/x.com\\\/p_duke\"],\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/author\\\/pedro-duque-vieira\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Creating A CAD Application In Java (JavaFX) - Java Code Geeks","description":"Interested to learn about CAD Application? Check our article explaining in a tutorial how to create a CAD Application in java.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.javacodegeeks.com\/2020\/08\/creating-a-cad-application-in-java-javafx.html","og_locale":"en_US","og_type":"article","og_title":"Creating A CAD Application In Java (JavaFX) - Java Code Geeks","og_description":"Interested to learn about CAD Application? Check our article explaining in a tutorial how to create a CAD Application in java.","og_url":"https:\/\/www.javacodegeeks.com\/2020\/08\/creating-a-cad-application-in-java-javafx.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_published_time":"2020-08-04T04:00:29+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/javafx-logo.jpg","type":"image\/jpeg"}],"author":"Pedro Duque Vieira","twitter_card":"summary_large_image","twitter_creator":"@p_duke","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Pedro Duque Vieira","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/2020\/08\/creating-a-cad-application-in-java-javafx.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/2020\/08\/creating-a-cad-application-in-java-javafx.html"},"author":{"name":"Pedro Duque Vieira","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/9039e8dfd941245cba4472141e054cd6"},"headline":"Creating A CAD Application In Java (JavaFX)","datePublished":"2020-08-04T04:00:29+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2020\/08\/creating-a-cad-application-in-java-javafx.html"},"wordCount":1882,"commentCount":2,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2020\/08\/creating-a-cad-application-in-java-javafx.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/javafx-logo.jpg","keywords":["JavaFX"],"articleSection":["Desktop Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/2020\/08\/creating-a-cad-application-in-java-javafx.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/2020\/08\/creating-a-cad-application-in-java-javafx.html","url":"https:\/\/www.javacodegeeks.com\/2020\/08\/creating-a-cad-application-in-java-javafx.html","name":"Creating A CAD Application In Java (JavaFX) - Java Code Geeks","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2020\/08\/creating-a-cad-application-in-java-javafx.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2020\/08\/creating-a-cad-application-in-java-javafx.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/javafx-logo.jpg","datePublished":"2020-08-04T04:00:29+00:00","description":"Interested to learn about CAD Application? Check our article explaining in a tutorial how to create a CAD Application in java.","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/2020\/08\/creating-a-cad-application-in-java-javafx.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/2020\/08\/creating-a-cad-application-in-java-javafx.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/2020\/08\/creating-a-cad-application-in-java-javafx.html#primaryimage","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/javafx-logo.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/javafx-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.javacodegeeks.com\/2020\/08\/creating-a-cad-application-in-java-javafx.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.javacodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Java","item":"https:\/\/www.javacodegeeks.com\/category\/java"},{"@type":"ListItem","position":3,"name":"Desktop Java","item":"https:\/\/www.javacodegeeks.com\/category\/java\/desktop-java"},{"@type":"ListItem","position":4,"name":"Creating A CAD Application In Java (JavaFX)"}]},{"@type":"WebSite","@id":"https:\/\/www.javacodegeeks.com\/#website","url":"https:\/\/www.javacodegeeks.com\/","name":"Java Code Geeks","description":"Java Developers Resource Center","publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"alternateName":"JCG","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.javacodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.javacodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.javacodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/javacodegeeks","https:\/\/x.com\/javacodegeeks"]},{"@type":"Person","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/9039e8dfd941245cba4472141e054cd6","name":"Pedro Duque Vieira","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/955cea179abb367633246f89136ff298a72c455f630601e27f2019dd7fe6c529?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/955cea179abb367633246f89136ff298a72c455f630601e27f2019dd7fe6c529?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/955cea179abb367633246f89136ff298a72c455f630601e27f2019dd7fe6c529?s=96&d=mm&r=g","caption":"Pedro Duque Vieira"},"description":"JavaFX and Swing, Freelancer and Consultant specialized in creating User Interfaces. Has been working as a front end consultant and has been developing web, native and cross platform since 2006. Holder of a master degree in Computer Science, he's permanently studying and taking courses in User Interface Design and User Experience. Owner of the software company Pixel Duke.","sameAs":["https:\/\/www.pixelduke.com","http:\/\/pt.linkedin.com\/pub\/pedro-duque-vieira\/8\/403\/264","https:\/\/x.com\/p_duke"],"url":"https:\/\/www.javacodegeeks.com\/author\/pedro-duque-vieira"}]}},"_links":{"self":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/106196","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/users\/118"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=106196"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/106196\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media\/147"}],"wp:attachment":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=106196"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=106196"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=106196"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}