Implémentation de zones de dessin dans des onglets dans JavaFX


Je voudrais ajouter une zone de dessin à mes onglets dans JavaFX. Je suis nouveau sur le terrain et j'ai essayé d'ajouter un Canevas à chaque onglet que je crée. Cependant, cela ne semble pas fonctionner. Code pertinent inclus.

@FXML
void fileNewTabHandler(ActionEvent event) {
    ++indexTab;
    Tab tab = new Tab("Untitled " + indexTab);
    Canvas canvas = new Canvas(500, 285);
    GraphicsContext gc = canvas.getGraphicsContext2D();
    gc.setFill(Color.BLUE);
    gc.fillRect(250, 856, 50, 60);
    tab.setContent(canvas);
    tabPane.getTabs().add(tab);
}

Ici tabPane et indexTab sont définis et fonctionnent tant que je n'utilise pas le canevas. Où vais-je tort. Dois-je utiliser une méthode différente pour implémenter ce que je veux?

Author: Ayush Mukherjee, 2015-03-21

1 answers

Échantillon rapide

Il n'y a pas de véritable astuce à cela, vous définissez simplement le canevas comme contenu de l'onglet.

onglet de l'échantillon

import javafx.application.Application;
import javafx.scene.*;
import javafx.scene.canvas.*;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

import java.util.Random;

public class TabbedCanvas extends Application {

    private int tabId = 0;
    private double W = 200, H = 150;

    private Random random = new Random(42);

    @Override
    public void start(Stage stage) {
        TabPane tabPane = new TabPane();

        Button newTabButton = new Button("New Tab");
        newTabButton.setOnAction(
                event -> addTab(tabPane)
        );
        newTabButton.fire();

        ToolBar toolBar = new ToolBar(newTabButton);
        toolBar.setMinHeight(ToolBar.USE_PREF_SIZE);

        VBox layout = new VBox(toolBar, tabPane);
        VBox.setVgrow(tabPane, Priority.ALWAYS);
        stage.setScene(new Scene(layout));
        stage.show();
    }

    private void addTab(TabPane tabPane) {
        Tab tab = new Tab("Tab: " + tabId++);
        tab.setContent(createTabContent());
        tabPane.getTabs().add(tab);
        tabPane.getSelectionModel().select(tab);
    }

    private Node createTabContent() {
        Canvas canvas = new Canvas(W, H);

        GraphicsContext gc = canvas.getGraphicsContext2D();
        gc.setFill(randomColor());
        gc.fillRect(0, 0, W, H);

        return canvas;
    }

    private Color randomColor() {
        return Color.rgb(
                random.nextInt(256),
                random.nextInt(256),
                random.nextInt(256)
        );
    }

    public static void main(String[] args) {
        launch(args);
    }
}
 1
Author: jewelsea, 2015-03-21 18:16:37