Реализация областей рисования во вкладках в JavaFX

1

Я хотел бы добавить область рисования к моим вкладкам в JavaFX. Я новичок в этом поле и попытался добавить Canvas к каждой вкладке, которую я создаю. Однако, похоже, это не работает. Включен соответствующий код.

@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);
}

Здесь tabPane и indexTab определены и работают до тех пор, пока я не использую холст. Где я иду не так. Должен ли я использовать другой метод для реализации того, что я хочу?

  • 2
    Так что же на самом деле происходит? Кажется, ваш прямоугольник находится за пределами вашего холста ...
Теги:
javafx
canvas
tabs

1 ответ

1
Лучший ответ

Быстрый пример

Нет никакого реального трюка, вы просто устанавливаете холст в качестве содержимого вкладки.

Изображение 174551

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);
    }
}
  • 0
    Благодарю. Это помогло.
  • 0
    Предположим, что у меня есть два разных вида вкладок, и я хочу создать их в отдельных файлах FXML, как позже добавить их в мою панель вкладок?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню