Javaでグーグルマップ(その2)

 GoogleMapAPIをもう少し触って見たいと思い、とりあえず、JavaScriptを手軽に試せるソフトをJavaで書いてみた。

 ■準備
 ①GoogleMapの登録をする。
 ②SWTを準備する。

 ■ソースコード
 次のようなコードを書いてみた。
 下のテキストエリアにJavaScriptを書き、"exec"で実行。とりあえず、動く。
 なんか、GoogleMapを使ってGISもどきとか作れそう。
 これまで、主にSwingを使っていたけれど、SWTも結構いい感じ。

package test;

import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
import org.eclipse.swt.SWT;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.browser.ProgressAdapter;
import org.eclipse.swt.browser.ProgressEvent;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.ToolItem;

public class GoogleMapPad {
	private Display display;
	private final Shell shell;
	private Browser browser;
	private Timer timer;
	private Text text;
	private List<String> list;
	private int count=0;
	private MessageBox box1;
	
	public GoogleMapPad(){
		display = new Display();
		shell = new Shell(display);
		shell.setLayout(new FillLayout());
		shell.setText("GoogleMap");
		SashForm sash = new SashForm(shell,SWT.VERTICAL);
		browser = new Browser(sash, SWT.NONE);
		browser.setUrl("http://www.eonet.ne.jp/~tmspace/map.html/map.html");//GoogleMap登録先URL
		Composite composite=new Composite(sash,SWT.MULTI|SWT.BORDER);
		composite.setLayout(new GridLayout());
		ToolBar toolbar = new ToolBar(composite,SWT.FLAT);
		toolbar.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
		ToolItem item1=new ToolItem(toolbar,SWT.PUSH);
		item1.setText("exec");
		box1=new MessageBox(shell,SWT.OK);
		box1.setMessage("It failed in execution.");
		box1.setText("Info");
		item1.addSelectionListener(new SelectionAdapter(){
			@Override
			public void widgetSelected(SelectionEvent arg0) {
				if(browser.execute(text.getText())){
					list.add(text.getText());
					count=list.size();
				}else{
					box1.open();
				}
			}
		});
		ToolItem item2=new ToolItem(toolbar,SWT.PUSH);
		item2.setText("clear");
		item2.addSelectionListener(new SelectionAdapter(){
			@Override
			public void widgetSelected(SelectionEvent arg0) {
				text.setText("");
			}
		});
		new ToolItem(toolbar,SWT.SEPARATOR);
		list=new ArrayList<String>();
		ToolItem item3=new ToolItem(toolbar,SWT.PUSH);
		item3.setText("prev");
		item3.addSelectionListener(new SelectionAdapter(){
			@Override
			public void widgetSelected(SelectionEvent arg0) {
				if(count==0){
					text.setText(list.get(0));
				}else if(count>0){
					text.setText(list.get(--count));
				}
			}
		});
		ToolItem item4=new ToolItem(toolbar,SWT.PUSH);
		item4.setText("next");
		item4.addSelectionListener(new SelectionAdapter(){
			@Override
			public void widgetSelected(SelectionEvent arg0) {
				if(count==list.size()-1){
					text.setText(list.get(count));
				}else if(count<list.size()-1){
					text.setText(list.get(count++));
				}
			}
		});
		text=new Text(composite,SWT.MULTI|SWT.BORDER|SWT.H_SCROLL|SWT.V_SCROLL);
		text.setLayoutData(new GridData(GridData.FILL_BOTH));
		timer=new Timer();
		ProgressAdapter pa=new ProgressAdapter(){
			final ProgressAdapter px=this;
			@Override
			public void completed(ProgressEvent arg0) {
				TimerTask task=new TimerTask(){
					@Override
					public void run() {
						Runnable rr=new Runnable(){
							@Override
							public void run() {
								browser.execute(
								"if (GBrowserIsCompatible()) {" +
								"var map = new GMap2(document.getElementById(\"map\"));" +
								"map.setCenter(new GLatLng(34.6833333333333, 135.50), 7);" +
								"map.addControl(new GLargeMapControl());" +
								"map.addControl(new GMapTypeControl());" +
								"map.enableContinuousZoom();"+
								"map.enableScrollWheelZoom()}");
								timer.cancel();
								browser.removeProgressListener(px);
							}
						};
						shell.getDisplay().syncExec(rr);
					}
				};
				timer.schedule(task, 1000);
			}
		};
		browser.addProgressListener(pa);
		shell.setMaximized(true);
		shell.open();
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch())
				display.sleep();
		}
		display.dispose();
	}

	public static void main(String[] args){
		GoogleMapPad pad=new GoogleMapPad();
	}
}

 ■結果
 一応、動いた。