Home Upgrade Search Memberlist Extras Hacker Tools Award Goals Help Wiki Contact

Java 

JavaFX - Having problems with adding/making custom shapes as GUI elements.

Hello. I made a window in javafx using scenebuilder and now I want to make 2d object and put it in there.
Because everything I made (buttons, textfields, etc) was done in SceneBuilder I didn't know how to add this 2d object there.
Idea was to make custom 2d buttons(for example) and put it there.
I tried something like this:

Any suggestions? And how to make custom gui shapes?

Code
public class Main extends Application {
    
    @Override
    public void start(Stage primaryStage) throws Exception {
        Canvas canvas = new Canvas(300, 250);
        GraphicsContext gc = canvas.getGraphicsContext2D();
        drawShapes(gc);
        Parent fxmlRoot= FXMLLoader.load(getClass().getResource("gui.fxml"));
        fxmlRoot.getChildrenUnmodifiable().add(canvas);
        primaryStage.setScene(new Scene(fxmlRoot));
        
        primaryStage.show();
        
    }
    
    private void drawShapes(GraphicsContext gc) {
        gc.setFill(Color.GREEN);
        gc.setStroke(Color.BLUE);
        gc.setLineWidth(5);
        gc.strokeLine(40, 10, 10, 40);
        gc.fillOval(10, 60, 30, 30);
        gc.strokeOval(60, 60, 30, 30);
        gc.fillRoundRect(110, 60, 30, 30, 10, 10);
        gc.strokeRoundRect(160, 60, 30, 30, 10, 10);
        gc.fillArc(10, 110, 30, 30, 45, 240, ArcType.OPEN);
        gc.fillArc(60, 110, 30, 30, 45, 240, ArcType.CHORD);
        gc.fillArc(110, 110, 30, 30, 45, 240, ArcType.ROUND);
        gc.strokeArc(10, 160, 30, 30, 45, 240, ArcType.OPEN);
        gc.strokeArc(60, 160, 30, 30, 45, 240, ArcType.CHORD);
        gc.strokeArc(110, 160, 30, 30, 45, 240, ArcType.ROUND);
        gc.fillPolygon(new double[]{10, 40, 10, 40},
                       new double[]{210, 210, 240, 240}, 4);
        gc.strokePolygon(new double[]{60, 90, 60, 90},
                         new double[]{210, 210, 240, 240}, 4);
        gc.strokePolyline(new double[]{110, 140, 110, 140},
                          new double[]{210, 210, 240, 240}, 4);
        
    }

    public static void main(String[] args) {
        launch(args);
        
    
    }
    
}


Possibly Related Threads...
Thread / Author Replies Views Last Post
by exploitsNov 24, 2024 01:24 AM 4 294 Nov 24, 2024 01:24 AM
Last Post: n1k7
[Python] by DocJun 2, 2021 07:06 AM 6 269 Jun 2, 2021 07:06 AM
Last Post: synchronizing
[Java] by cryptobassboostMay 20, 2019 11:49 AM 4 249 May 20, 2019 11:49 AM
Last Post: bluriy