作者:dongyx
说到Java可视化界面编程,可能大家想到的就是swing和JavaFX。由于SuperMap iobjects Java的控件接口是基于swing来写的,在swing界面设计上Java组件已经很好的能够支持了,那么Java组件能否也能支持JavaFX呢,下面小编来为大家介绍Java组件使用JavaFX打开一幅地图。
一、什么是JavaFX
JavaFX是一个强大的图形和多媒体处理工具包集合,它允许开发者来设计、创建、测试、调试和部署富客户端程序,并且和Java一样跨平台。
在JavaFX中要想显示一个控件就必须具备以下要素: 窗口 ?????????Stage
??-场景 ??????Scene
????-布局 ????stackPane
??????-控件 ??Button
二、创建一个空的JavaFX框架程序
package com.test;
import javafx.application.Application;
import javafx.stage.Stage;
public class Test extends Application {
@Override
public void start(Stage stage) throws Exception {
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
三、在JavaFX中引用Java组件的MapControl并显示一幅地图 工程地址:链接:https://pan.baidu.com/s/1vg404-RYMExDMYe3J5UqDw? 提取码:zz7x? 1.通过SwingNode实例化一个MapControl
MapControl mapControl=new MapControl();
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
Workspace workspace = new Workspace();
WorkspaceConnectionInfo workspaceConnectionInfo = new
WorkspaceConnectionInfo();
workspaceConnectionInfo.setType(WorkspaceType.SMWU);
String file = "工作空间地址";
workspaceConnectionInfo.setServer(file);
workspace.open(workspaceConnectionInfo);
mapControl.getMap().setWorkspace(workspace);
mapControl.getMap().open(workspace.getMaps().get(0));
mapControl.setCursor(java.awt.Cursor.getPredefinedCursor(java.awt.Cursor.CROSSHAIR_CURSOR));
swingNode.setContent(mapControl);
}
});
2.创建布局控件 StackPane pane = new StackPane(); 3.将MapControl添加到布局中
AnchorPane anchorPane=new AnchorPane();
StackPane pane = new StackPane();
HBox hbox = new HBox();
Button zoomout = new Button("缩小");
pane.setPrefHeight(1024);
pane.setPrefWidth(2048);
pane.getChildren().add(swingNode);
hbox.getChildren().addAll(zoomin, zoomout);
anchorPane.getChildren().addAll(pane,hbox);
AnchorPane.setTopAnchor(pane, 50.0);
4.创建一个场景Scene Scene scene = new Scene(anchorPane);
5.将场景Scene添加到窗口Stage中 stage.setScene(scene); 6.显示窗口 stage.show(); 显示结果如下:
|