Recent changes Random page
GAMING
Technology
 
Gaming
Entertainment
Science Fiction
Biggest wikis
Hobbies
Music
See more...

JavaFX Example Map

Материал из JavaFX

Перейти к: навигация, поиск
 

Главная | Описание языка | API | Примеры | Инструменты Разработки | Новости | Ресурсы | Вопросы и ответы | Форум


Содержание

[править] Описание приложения

Приложение Карта Мира демонстрирует, как можно использовать класс JXMapViewer в JavaFX Script приложении, чтобы находить точки на карте мира.

[править] Необходимые требования

Чтобы приложение заработало, вам нужно:

  • Иметь доступ к интернету
  • Скачать swingx-ws библиотеку, разархивировать, добавить содержащиеся в ней swing-worker.jar, swingx.jar, swingx-bean.jar и swingx-ws-year_month_day.jar файлы в CLASSPATH (swingx-ws от 09 декабря 2007)

[править] Нахождение точек на карте

Изображение:World_map_coordinats.png

Довольно простая программа на языке JavaFX Script позволяет находить точки на карте, если известны широта и долгота этой точки.

Пример программы:

import javafx.ui.*;
import java.lang.System;
import java.text.DecimalFormat;
import org.jdesktop.swingx.JXMapKit;


class MapKit extends Widget {
    private attribute jXMapKit:JXMapKit;
    operation setAddressLocation(latitude:Number, longitude:Number);
}

operation MapKit.createComponent() {
    jXMapKit = new <<org.jdesktop.swingx.JXMapKit>>();
    return jXMapKit;
}

operation MapKit.setAddressLocation(latitude:Number, longitude:Number){
    var geoPosition = new <<org.jdesktop.swingx.mapviewer.GeoPosition>>(latitude,longitude);
    jXMapKit.setAddressLocation(geoPosition);
}


var mapKit = MapKit{};

var latitude = "0";
var longitude = "0";

var formatter = DecimalFormat.getInstance();

Frame{
    
    title: "World Map"
    width: 800
    height: 600
    onClose: operation(){ System.exit(0);}
    
    content: BorderPanel {
        center: bind mapKit
        right: BorderPanel {
            top: Box{
                orientation: VERTICAL:Orientation
                content: [ TextField{
                    border: TitledBorder { title : "Latitude" }
                    columns: 12
                    value: bind latitude
                }, TextField{
                    border: TitledBorder { title : "Longitude" }
                    columns: 12
                    value: bind longitude
                },Button{
                    text: "Go"
                    mnemonic    : G
                    action: operation(){
                        var x = formatter.parse(latitude).doubleValue();
                        var y = formatter.parse(longitude).doubleValue();
                        mapKit.setAddressLocation(x, y);
                    }
                }]
            }
        }
    }
    
    visible: true
}


[править] Найди город на карте мира

Изображение:World_map_peterburg.png


Пример объявления городов
class GeoPosition {
    attribute latitude: Number;
    attribute longitude: Number;
}


class AddressLocation {
    attribute name: String;
    attribute location: GeoPosition;
    attribute image: String;
}

class City extends AddressLocation{
}


Moscow:City = City{
    name: "Moscow"
    location: GeoPosition {
        latitude :  55.752222
        longitude:  37.632222
    }
    
    image: "http://upload.wikimedia.org/wikipedia/commons/3/31/StBasile_SpasskayaTower_Red_Square_Moscow.hires.jpg"
};

SaintPetersburg:City = City{
    name: "Saint Petersburg"
    location: GeoPosition {
        latitude :  59.933333
        longitude:  30.333333
    }
    
    image: "http://upload.wikimedia.org/wikipedia/commons/c/cd/Petropavlovskaia_Krepost_aerial.jpg"
};


Код
import javafx.ui.*;
import javafx.ui.canvas.*;

import java.lang.System;
import java.awt.Dimension;

import org.jdesktop.swingx.JXMapKit;



class MapKit extends Widget {
    private attribute jXMapKit:JXMapKit;
    attribute addressLocation: AddressLocation;
}



trigger on MapKit.addressLocation = value{
    jXMapKit.setAddressLocation(new <<org.jdesktop.swingx.mapviewer.GeoPosition>>(value.location.latitude,value.location.longitude));
}

operation MapKit.createComponent() {
    jXMapKit = new <<org.jdesktop.swingx.JXMapKit>>();
    jXMapKit.setDefaultProvider(<<org.jdesktop.swingx.JXMapKit$DefaultProviders>>.OpenStreetMaps);
    jXMapKit.setAddressLocation(new <<org.jdesktop.swingx.mapviewer.GeoPosition>>(59.933333,30.333333));
    return jXMapKit;
}


operation MapKit.setAddressLocation(addressLocation:AddressLocation){
    var geoPosition = new <<org.jdesktop.swingx.mapviewer.GeoPosition>>(addressLocation.location.latitude,addressLocation.location.longitude);
    jXMapKit.setAddressLocation(geoPosition);
    jXMapKit.setCenterPosition(geoPosition);
    jXMapKit.setZoom(10);
}



class MapModel{
    private attribute mapKit: MapKit;
    attribute ind: Number;
    attribute points: AddressLocation*;
}

trigger on MapModel.ind = value{
    mapKit.addressLocation = points[value];
}

attribute MapModel.mapKit = MapKit{
    preferredSize:new Dimension(600,250)
};

attribute MapModel.points = [
    Moscow:City,
    SaintPetersburg:City,
    Novosibirsk:City
];


var mapModel = MapModel{
    ind: 1
};




var point = bind mapModel.points[mapModel.ind];

Frame{
    
    title: "World Map"
    width: 800
    height: 600
    onClose: operation(){ System.exit(0);}
    
    content: BorderPanel {
        center: bind mapModel.mapKit
        right: BorderPanel{
            top: BorderPanel{
                top: Label{
                    text: "Select City:"
                }
                center: FlowPanel{
                    content: ListBox{
                        fixedCellWidth: 100
                        selection:  bind mapModel.ind
                        cells: bind foreach(point in mapModel.points)
                        ListCell{
                            text: point.name
                        }
                    }
                    
                    
                }
            }
            center: FlowPanel{ content: Canvas{
                content: ImageView{
                    image: Image {
                        url: bind point.image
                    }
                    size: Dimension {
                        width: 100
                        height: 100
                    }
                }
            }
            }
        }
    }
    
    visible: true
}
Оцените: Share this article: