如何从控制器访问vBox或任何其他布局?

时间:2015-12-25 08:22:37

标签: java opencv javafx javafx-8 opencv3.0

我计划在现场使用openCV从我的网络摄像头获取实时信息。我将JavaFX用于GUI目的。

GUI:  我有父窗口作为AnchorPane。我在其中添加了Vbox和Hbox。其中Vbox包含画布(加载实时订阅源的地方).Hbox包含2个按钮 我把父母当作AnchorPane。因此,当我运行代码时,我在整个窗口中获得了视频源,并删除了该按钮。所以我想要的是视频源应该显示在vBox中。

Layout

Output

运行程序时,按钮会被删除。

  • 视频Feed是否只采用vBOX场景?

    要明确说明我希望在视频供稿期间显示这些按钮。

在下面的代码中,我给了AnchorPane(fx:id-anchorpane)和vBOX(fx:id-vb)ID。我尝试从vb(代码中的注释)获取场景,但我想我错过了一些东西。

代码段:

@FXML
private Canvas canvas;
@FXML
private Button button_start;
private static final int SCENE_W = 640;
private static final int SCENE_H = 480;

VideoCapture videoCapture;
GraphicsContext g2d;
@FXML
Stage stage;
@FXML
private AnchorPane anchorpane;
@FXML
private VBox vb;
@FXML
private Group group;

Scene scene;
AnimationTimer timer;

@FXML
private void handleButtonAction(ActionEvent event) {
    initOpenCv();
    System.out.println("test3");
    canvas = new Canvas(SCENE_W, SCENE_H);
    g2d = canvas.getGraphicsContext2D();
    g2d.setStroke(Color.GREEN);
    group = new Group(canvas);
    scene = new Scene(group, SCENE_W, SCENE_H);
    stage = (Stage) anchorpane.getScene().getWindow();
    //stage = (Stage) vb.getScene().getWindow();
    stage.setScene(scene);
    stage.setResizable(false);
    stage.show();
    }
    timer = new AnimationTimer() {
        Mat mat = new Mat();
        @Override
        public void handle(long now) {
            videoCapture.read(mat);
            Image image = mat2Image(mat);
            g2d.drawImage(image, 0, 0);
        }
    };
    timer.start();
}

在代码中initopenCv()函数加载本机库并具有OpenCV的videoCapture函数。

 private void initOpenCv() {

    System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

    videoCapture = new VideoCapture();
    videoCapture.open(0);

    System.out.println("Camera open: " + videoCapture.isOpened());
}

0 个答案:

没有答案