A3: Widgets & Layout


In this assignment you will implement a vector-drawing program in Java/Java FX. Your program will allow a user to select shapes to draw, set their properties, and draw the shapes on-screen. This type of program would typically be used to draw simple diagrams.

This is a rough mockup that illustrates the features that you will implement, and the basic layout that you must use.


Functional Requirements

The main area of your drawing program is a canvas where users can draw shapes. Users can select a shape from the list on the side, specify colour, border thickness and style, then use their mouse to draw that shape on the canvas.

Your drawing program will have the following layout and features:

The following functionality should be supported:

In all cases, your UI should disable controls when they are not appropriate (e.g. if no shape is selected and you click on the Select tool, the drawing property tools should be disabled since they don't apply. Once you select a shape, they wold then be enabled and changed to the properties for that shape).

Choose Your Own Feature! (Select one or more features to implement from the list below, up to 10 marks).

Technical Requirements

The following is a list of technical constraints and guidelines:


Your directory structure for your assignment submission should be in subdirectories under your a3/ directory in your Git repository. It should use a standard file layout for a Gradle project. For example, your submission should resemble this (likely with slightly different class, image and sound file names). Note that you should NOT include the contents of the out/ folder (since they will be replaced when we build your project). Also, your project may or may not include a3.iml depending on whether you used IntelliJ.

    ├── a3.iml
    ├── build/
    ├── build.gradle
    ├── gradle/
    ├── gradlew
    ├── gradlew.bat
    ├── readme.md
    ├── settings.gradle
    └── src/
        └── main
            └── java
                ├── CanvasView.java
                ├── Model.java
                ├── SketchIt.java
                └── ToolbarView.java
            └── resources
                ├── selection.jpg
                ├── erase.jpg 
                └── circle.jpg

Your submission needs to include:

Your `readme.md' file needs to include, at a minimum:


Your submission will be assessed roughly as follows: