JavaFXとGoogleMap(2)

 SwingXのJXMapViewerをJavaFXで使ってみた。
 ブラウザの外に出すと、いかにもRIAといった感じなる。
 >サンプル実行

(注)6/2に一部修正。

ソースコード

package maptest;
import java.lang.Object;
import javafx.ext.swing.SwingButton;
import javafx.ext.swing.SwingComponent;
import javafx.ext.swing.SwingIcon;
import javafx.scene.image.Image;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.Scene;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
import org.jdesktop.swingx.JXMapKit;
import org.jdesktop.swingx.JXMapViewer;
import org.jdesktop.swingx.mapviewer.DefaultTileFactory;
import org.jdesktop.swingx.mapviewer.GeoPosition;
import org.jdesktop.swingx.mapviewer.TileFactoryInfo;

public function run(args: String[]){
    var sWidth=480;
    var sHeight=320;
    var map=createMap() as JXMapViewer;
    map.setPreferredSize(new java.awt.Dimension(sWidth,sHeight));
    var component=SwingComponent.wrap(map);
    component.clip = Rectangle {
            width: sWidth height: sHeight
            arcHeight: 30 arcWidth: 30
    };

    var homeButton=SwingButton{
        width:24
        height:24
        icon:SwingIcon{
            image : makeImage("home");
        }
        action :function(){
            map.setZoom(9);
            map.setAddressLocation(new GeoPosition(34.683,135.5));
        }
    }

    var meshButton=SwingButton{
        width:24
        height:24
        icon:SwingIcon{
            image : makeImage("mesh");
        }
        action :function(){
            if(map.isDrawTileBorders()){
               map.setDrawTileBorders(false);
            }else{
                map.setDrawTileBorders(true);
            }
        }
    }

    Stage {
        title:"MapTest"
        scene: Scene {
            content:VBox{
                content:[
                    HBox{
                        content:[
                            homeButton,
                            meshButton,
                        ]
                    },
                    component,
                ]
            }
        }
    }
}

public function createMap(){
    var map=new JXMapViewer() as JXMapViewer;
    var max=17;
    var info=new TileFactoryInfo(1,17,17,256,true,true,
          "http://tile.openstreetmap.org", "x", "y", "zoom");
    var tf=new DefaultTileFactory(info);
    map.setTileFactory(tf);
    map.setZoom(9);
    map.setAddressLocation(new GeoPosition(34.6833,135.5));
    map.setDrawTileBorders(true);
    map.setRestrictOutsidePanning(true);
    map.setHorizontalWrapped(false);
    var kit=new JXMapKit();
    kit.setDefaultProvider(JXMapKit.DefaultProviders.OpenStreetMaps);
    kit.setDataProviderCreditShown(true);
    return map;
}

public function makeImage(name: String) {
    Image{url:"{__DIR__}resources/{name}.png"};
}

■実行結果
 ブラウザでの実行結果は、以下のとおり。


 
 JavaFXなので、Altキーを押しながらアプレットをブラウザの外へ持ち出せる。


 
 ブラウザ外へ持ち出した場合、ブラウザを終了させてもアプレットが維持される。

 

 SwingXには、こんな話もあるみたいだけど、頑張って欲しいなあ。オラクルに期待。

■参考URL