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(); } }