Swing Maps mit Swing

  • Themenstarter Themenstarter Xenya
  • Beginndatum Beginndatum
X

Xenya

Gast
Hallo,
meine Anwendung soll Geo-Positionen, die ich in einer Datenbank gespeichert habe, in einer Karte visualisieren. Die bisjetzige Oberfläche habe ich mit Swing erstellt.
Als IDE verwende ich Eclipse mit dem GUI-Gestalter Windowbuilder Pro.

Habe nach Map + Swing gegoogelt und kam so darauf, dass wohl das Swing-Element jxmapviewer genau das sein sollte, was ich brauche.

Habe dafür auch ein Tutorial gefunden, das von vielen anderen Seiten auch verlinkt wurde.
Leider wird dort die Verwendung unter NetBeans 6 erklärt. Aber für Grundlageninformationen sicher nicht verkehrt.

Habe aus interesse noch zuästzlich nach Windowbuilder gesucht und einen Artikel auf stackoverflow gefunden, der erklärt wie man beim Windowbuilder ein sogenanntes "Pallete" hinzufügen kann, mit dem einen die SwingX-Komponenten darunter zur Verfügung stehen.

Mit diesen Informationen wollte ich mich nun ran machen die Downloads für den jxmapviewer und die Pallete zu finden.
Aber genau daran scheitere ich gerade.

Wenn ich nach jxmapviewer + download google, kommt nicht wirklich viel.
In dem Tutorial wird man auf die Seite SwingLabs download page geleitet, um dort swingx-ws zu downloaden (für was steht WS?).
Wenn ich nun die Source oder die Binary davon downloaden will, kommt:
Not Found
The page you were looking for doesn't exist.
You may have mistyped the address or the page may have moved.


Einen alternativen Download finde ich nicht?
Könnt ihr mir weiterhelfen?
Oder ist jxmapviewer veraltet?
Wenn ja: Was sind die aktuellen Komponenten/Umsetzungsmöglichkeiten für swing, um eine Karte zu bekommen.

Vielen lieben Dank
 
Hallo Marco13,
danke für deine Antwort.

Ja, sowas habe ich gesucht. Leider habe ich dort die Komponente JXMapViewer nicht gefunden.
Wenn ich den Pfad auf swingx-ws anpasse bekomme ich auch das swingx-ws-Paket.

Dort gibt es auch die Komponente.
Leider krieg ich die Karte in meinem Swing-Programm rein gar nicht hin.
Weder mit dem Tutorial, noch mit einem Blog-Eintrag darüber komme ich weiter. Leider nutzen beide NetBeans (auf das ich eigentlich nicht wechseln will) und gehen auf die Einbindung in anderen IDEs nicht ein.
Ich weiß nicht mal, ob der Versuch es einzubinden überhaupt ansatzweise stimmt.

Hat irgend jemand schon eine Karte eingebunden und kann mir helfen?
 
Wu-hu... da geht's ja um ECHTE Maps... das scheint ja was größeres zu sein... Kanns du genauer sagen, was nicht klappt? Diesen GUI/WindowBuilder würde ich erstmal kritisch sehen, erstmal versuchen, eins der Beispielprogramme (irgendwie, mit Copy&Paste) zum Laufen zu bringen. Hast du die JARs aus dem ZIP zu deinem Projekt hinzugefügt? (Ins Projektverzeichnis legen, dann im "Project Explorer" F5 drücken (zum refreshen) und dann rechtsklick auf die JAR und "Add to Build path")
 
Hallo Marco13,
ja es geht mir um echte Karten.

Hier mal mein Programm:
Code:
import java.awt.EventQueue;

import javax.swing.JFrame;
import java.awt.BorderLayout;

import org.jdesktop.swingx.JXMapKit;
import org.jdesktop.swingx.JXMapKit.DefaultProviders;


public class MapTest
{

	private JFrame frame;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args)
	{
		EventQueue.invokeLater(new Runnable()
		{
			public void run()
			{
				try
				{
					MapTest window = new MapTest();
					window.frame.setVisible(true);
				}
				catch(Exception e)
				{
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the application.
	 */
	public MapTest()
	{
		initialize();
	}

	/**
	 * Initialize the contents of the frame.
	 */
	private void initialize()
	{
		frame = new JFrame();
		frame.setBounds(100, 100, 699, 525);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		JXMapKit mapKit = new JXMapKit();
		mapKit.setName("mapKit");
		mapKit.setPreferredSize(new java.awt.Dimension(413, 218));
		frame.getContentPane().add(mapKit, BorderLayout.CENTER);
		mapKit.setDefaultProvider(DefaultProviders.OpenStreetMaps);
	}
}

Dann kommen tausende Fehler wie folgender:
09.02.2012 01:39:53 org.jdesktop.swingx.mapviewer.DefaultTileFactory$TileRunner run
SCHWERWIEGEND: Failed to load a tile at url: http://tile.openstreetmap.org/6/30/21.png, retrying
java.lang.NoSuchMethodError: org.jdesktop.swingx.util.PaintUtils.loadCompatibleImage(Ljava/io/InputStream😉Ljava/awt/image/BufferedImage;
at org.jdesktop.swingx.mapviewer.DefaultTileFactory$TileRunner.run(DefaultTileFactory.java:375)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:680)

Auf Stackoverflow habe ich einen Thread gefunden, bei dem der Ersteller das gleiche Problem hatte.
Er hat kurz darauf folgendes gepostet:
It works now. The problem was the jar file, it didn't support a method that it needed to use.
Leider hat er nicht geschrieben, wie er es geändert hat, bzw. wo er die passende jar-Datei her hat.

Muss aber ehrlich sagen, ich weiß aber auch nicht, welche JARs relevant sind.
Habe importiert:
SwingX-WS-1.0/repo/org.swinglabs/jars/swingx-ws-0.1-b4.jar
SwingX-WS-1.0/repo/org.swinglabs/java-sources/swingx-ws-0.1-b4-sources.jar

swingx-ws-1.0-src/lib/cobundle/swingx-1.6.jar
swingx-ws-1.0-src/lib/cobundle/swingx-beaninfo-1.6.ja

und zum Testen:
alle jars von
swingx-ws-1.0-src/lib/build-only
swingx-ws-1.0-src/lib/optional

Also im Prinzip mal alles
 
Hmmm... diese ganzen "swingx-ws-1.0-src" sind irritierend - man braucht ja eigentlich nur die JARs. Hab' das gepostete Programm gerade mal ausprobiert, und es funktioniert (erstaunlich einfach).

- Projekt anlegen, mit der Klasse, die du gepostet hast
- swingx-1.6.jar aus diesem Archiv: http://java.net/downloads/swingx/releases/1.6/swingx-1.6.zip
- swingx-ws-1.0.jar aus diesem Archiv: http://java.net/downloads/swingx-ws/releases/1.0/swingx-ws-1.0-bin.zip
- Beide JARs ins Projektverzeichnis legen
- In der Project-Explorer-Ansicht von Eclipse "F5" zum refreshen - die JARs sollten da dann sichtbar sein
- Auf beide JARs rechtsklicken und mit "Add to Build Path" zum Build Path hinzufügen
- Starten - und da erscheint tatsächlich eine Landkarte 😱 (mit effektiv... 0 Zeilen Code! *fresst das, ihr C++-fanbois* 😀 )
 
Hallo Marco13,
vielen Dank, ich habe es mit diesen Downloads gemacht und du hast recht, es funktioniert. Wow!!! Danke
Ich habe die SRC genommen, um in den Code einsehen zu können.

Hmmm... diese ganzen "swingx-ws-1.0-src" sind irritierend - man braucht ja eigentlich nur die JARs. Hab' das gepostete Programm gerade mal ausprobiert, und es funktioniert (erstaunlich einfach).

- Projekt anlegen, mit der Klasse, die du gepostet hast
- swingx-1.6.jar aus diesem Archiv: http://java.net/downloads/swingx/releases/1.6/swingx-1.6.zip
- swingx-ws-1.0.jar aus diesem Archiv: http://java.net/downloads/swingx-ws/releases/1.0/swingx-ws-1.0-bin.zip
- Beide JARs ins Projektverzeichnis legen
- In der Project-Explorer-Ansicht von Eclipse "F5" zum refreshen - die JARs sollten da dann sichtbar sein
- Auf beide JARs rechtsklicken und mit "Add to Build Path" zum Build Path hinzufügen
- Starten - und da erscheint tatsächlich eine Landkarte 😱 (mit effektiv... 0 Zeilen Code! *fresst das, ihr C++-fanbois* 😀 )



Da ich mich mit SwingX nicht auskenne, wollte ich einfach mal noch eine Alternative in den Raum werfen: Maps in JavaFX 2.0 // JavaFX News, Demos and Insight // FX Experience
Hallo,
danke für den Hinweis.
Ich werde mich nun mit dem swingx erstmals beschäftigen, nachdem dies nun geht.
Sollte ich damit nicht klar kommen, komme ich auf die Umsetzung mit JavaFX und diesem Framework zurück.
 

Zurück
Oben