... the user friendly GPS tool


Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
ConvertPanel::tablePositions
#1
Hallo Christian,

kannst Du mir einen Hinweis geben, wo noch was fehlt:

Ich habe für die Positionstabelle ConvertPanel::tablePositions die Property autoCreateRowSorter auf true gesetzt. Kann man händisch machen oder in IntelliJ IDEA im UIDesigner setzen. Danach verhält sich RC seltsam. Beim Öffnen einer gpx Datei spuckt er nur, dass beim Download was schiefgegangen sei.

Gruß,

Ilmari

SCHWERWIEGEND: java.lang.reflect.InvocationTargetException
27.08.2010 18:06:26
SCHWERWIEGEND: at java.awt.EventQueue.invokeAndWait(EventQueue.java:998)
27.08.2010 18:06:26
SCHWERWIEGEND: at javax.swing.SwingUtilities.invokeAndWait(SwingUtilities.java:1320)
27.08.2010 18:06:26
SCHWERWIEGEND: at slash.navigation.converter.gui.panels.ConvertPanel$17.run(ConvertPanel.java:398)
27.08.2010 18:06:26
SCHWERWIEGEND: at java.lang.Thread.run(Thread.java:619)
27.08.2010 18:06:26
SCHWERWIEGEND: Caused by: java.lang.IllegalArgumentException: This is determined by the PositionsTableColumnModel
27.08.2010 18:06:26
SCHWERWIEGEND: at slash.navigation.converter.gui.models.PositionsModelImpl.getColumnCount(PositionsModelImpl.java:60)
27.08.2010 18:06:26
SCHWERWIEGEND: at slash.navigation.converter.gui.undo.UndoPositionsModel.getColumnCount(UndoPositionsModel.java:39)
27.08.2010 18:06:26
SCHWERWIEGEND: at javax.swing.table.TableRowSorter$TableRowSorterModelWrapper.getColumnCount(TableRowSorter.java:244)
27.08.2010 18:06:26
SCHWERWIEGEND: at javax.swing.DefaultRowSorter.updateUseToString(DefaultRowSorter.java:602)
27.08.2010 18:06:26
SCHWERWIEGEND: at javax.swing.DefaultRowSorter.sort(DefaultRowSorter.java:556)
27.08.2010 18:06:26
SCHWERWIEGEND: at javax.swing.DefaultRowSorter.allRowsChanged(DefaultRowSorter.java:835)
27.08.2010 18:06:26
SCHWERWIEGEND: at javax.swing.JTable.notifySorter(JTable.java:4245)
27.08.2010 18:06:26
SCHWERWIEGEND: at javax.swing.JTable.sortedTableChanged(JTable.java:4105)
27.08.2010 18:06:26
SCHWERWIEGEND: at javax.swing.JTable.tableChanged(JTable.java:4382)
27.08.2010 18:06:26
SCHWERWIEGEND: at javax.swing.table.AbstractTableModel.fireTableChanged(AbstractTableModel.java:280)
27.08.2010 18:06:26
SCHWERWIEGEND: at javax.swing.table.AbstractTableModel.fireTableDataChanged(AbstractTableModel.java:182)
27.08.2010 18:06:26
SCHWERWIEGEND: at slash.navigation.converter.gui.models.PositionsModelImpl.setRoute(PositionsModelImpl.java:52)
27.08.2010 18:06:26
SCHWERWIEGEND: at slash.navigation.converter.gui.undo.UndoPositionsModel.setRoute(UndoPositionsModel.java:91)
27.08.2010 18:06:26
SCHWERWIEGEND: at slash.navigation.converter.gui.models.FormatAndRoutesModel.setSelectedItem(FormatAndRoutesModel.java:186)
27.08.2010 18:06:26
SCHWERWIEGEND: at slash.navigation.converter.gui.models.FormatAndRoutesModel.setRoutes(FormatAndRoutesModel.java:86)
27.08.2010 18:06:26
SCHWERWIEGEND: at slash.navigation.converter.gui.panels.ConvertPanel$17$1.run(ConvertPanel.java:402)
27.08.2010 18:06:26
SCHWERWIEGEND: at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:199)
27.08.2010 18:06:26
SCHWERWIEGEND: at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
27.08.2010 18:06:26
SCHWERWIEGEND: at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
27.08.2010 18:06:26
SCHWERWIEGEND: at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
27.08.2010 18:06:26
SCHWERWIEGEND: at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
27.08.2010 18:06:26
SCHWERWIEGEND: at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
27.08.2010 18:06:26
SCHWERWIEGEND: at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
27.08.2010 18:06:26
SCHWERWIEGEND: at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
27.08.2010 18:06:26 slash.navigation.converter.gui.RouteConverter$7 run
SCHWERWIEGEND: Open error: null


Attached Files Thumbnail(s)
   

Grüße,
Ilmari
Reply
#2
(27.08.2010, 17:09)IlmariKrebs Wrote: kannst Du mir einen Hinweis geben, wo noch was fehlt:

Was willst Du denn erreichen?

(27.08.2010, 17:09)IlmariKrebs Wrote: Ich habe für die Positionstabelle ConvertPanel::tablePositions die Property autoCreateRowSorter auf true gesetzt. Kann man händisch machen oder in IntelliJ IDEA im UIDesigner setzen. Danach verhält sich RC seltsam. Beim Öffnen einer gpx Datei spuckt er nur, dass beim Download was schiefgegangen sei.

Das Caption.PNG kann ich leider nicht öffnen.
--
Christian
Reply
#3
(27.08.2010, 17:09)IlmariKrebs Wrote: 27.08.2010 18:06:26
SCHWERWIEGEND: Caused by: java.lang.IllegalArgumentException: This is determined by the PositionsTableColumnModel
27.08.2010 18:06:26
SCHWERWIEGEND: at slash.navigation.converter.gui.models.PositionsModelImpl.getColumnCount(PositionsModelImpl.java:60)
27.08.2010 18:06:26
SCHWERWIEGEND: at slash.navigation.converter.gui.undo.UndoPositionsModel.getColumnCount(UndoPositionsModel.java:39)
27.08.2010 18:06:26
SCHWERWIEGEND: at javax.swing.table.TableRowSorter$TableRowSorterModelWrapper.getColumnCount(TableRowSorter.java:244)

Das ist der entscheidende Teil: Der von Dir konfigurierte Spaltensortierer möchte die Anzahl der wissen - die wird bei mir aber nicht von PositionsModelImpl festgelegt, da sie variabel ist sondern vom PositionsTableColumnModel.

Die NPE von Screenshot ist auf die gescheiterte Initialisierung zurückzuführen.
--
Christian
Reply
#4
Danke,

aber wenn PositionsTableColumnModel für den Sorter nehme, dann wird die GUI nicht richtig initialisiert. Da werde ich noch ein wenig forschen müssen.

Anbei habe ich einen Patch, mit dem ich die Positionsliste ausdrucken kann. Das ist eine Funktionalität, die ich schon länger vermisste. Schaus Dir mal an, ob Du damit was anfangen willst. Nachteil ist, dass der Swing Druckerauswahl Dialog hochkommt.

Viele Grüße,

Ilmari


Attached Files
.txt   PrintPositions.patch.txt (Size: 7.08 KB / Downloads: 786)

Grüße,
Ilmari
Reply
#5
(27.08.2010, 22:21)IlmariKrebs Wrote: aber wenn PositionsTableColumnModel für den Sorter nehme, dann wird die GUI nicht richtig initialisiert.

Da fliegt bestimmt eine Exception.

(27.08.2010, 22:21)IlmariKrebs Wrote: Da werde ich noch ein wenig forschen müssen.

Du kannst die Swing-Automatik fürs Sortieen nicht nutzen und mußt dies ausprogrammieren für jede Spalte.

Nochmal die Frage: wofür willst Du das?

(27.08.2010, 22:21)IlmariKrebs Wrote: Anbei habe ich einen Patch, mit dem ich die Positionsliste ausdrucken kann. Das ist eine Funktionalität, die ich schon länger vermisste.

Gute Idee. Was kommt dabei heraus?

(27.08.2010, 22:21)IlmariKrebs Wrote: Schaus Dir mal an, ob Du damit was anfangen willst. Nachteil ist, dass der Swing Druckerauswahl Dialog hochkommt.

Bei mir bleibt das ganze Programm stehen in Win32PrintServies#getMediaPrintableArea :-( Habe hier Windows 7 64-bit - 1 Netzwerkdrucker, 1 PDF-Drucker. Könnte es daran liegen?


Zum Patch: Schöner ist es, wenn er minimal ist, d.h. keine überflüssigen Imports wie

+import javax.swing.table.TableModel;
+import javax.swing.table.TableRowSorter;

enthält. Oder Extra-Leerzeilen wie hier

@@ -601,6 +606,7 @@
renameDialog.pack();
renameDialog.restoreLocation();
renameDialog.setVisible(true);
+
}

Und Fehler zu "fressen" ist fürs Ausprobieren ok, da muß natürlich ein Fehlerdialog hin:

+ public void print() {
+ try {
+ getPositionsView().print();
+ } catch (PrinterException e) {
+ e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
+ }
+ }
--
Christian
Reply
#6
(29.08.2010, 12:00)routeconverter Wrote: Du kannst die Swing-Automatik fürs Sortieen nicht nutzen und mußt dies ausprogrammieren für jede Spalte.

Nochmal die Frage: wofür willst Du das?

Wenn ich eine Wegpunktliste bereinigen will, dann geht das relativ geschickt, wenn ich westlich, östlich, nördlich oder südlich alles wegwerfen kann, nur wenn die Liste sortiert ist. Ich benutze EasyGPS hierfür recht häufig.

Andere Anwendungen wären in einem Track alle Punkte zu finden wo ein bestimmtes Kriterium erfüllt ist, dann läßt es sich besser in einer sortierten Liste suchen.

(29.08.2010, 12:00)routeconverter Wrote:
(27.08.2010, 22:21)IlmariKrebs Wrote: Anbei habe ich einen Patch, mit dem ich die Positionsliste ausdrucken kann. Das ist eine Funktionalität, die ich schon länger vermisste.

Gute Idee. Was kommt dabei heraus?

Eine ausgedruckte Liste der Positionen, so wie sie in der GUI sichtbar ist.
Diese habe ich bislang immer per Bildschirmhardcopy erzeugt.

(29.08.2010, 12:00)routeconverter Wrote: Bei mir bleibt das ganze Programm stehen in Win32PrintServies#getMediaPrintableArea :-( Habe hier Windows 7 64-bit - 1 Netzwerkdrucker, 1 PDF-Drucker. Könnte es daran liegen?

Hmmm..Ich habe bis auf den Netzwerkdrucker die selbe Konfiguration. Habe aber einen etwas älteren Stand von RC (Anfang/Mitte August).

(29.08.2010, 12:00)routeconverter Wrote: Zum Patch: Schöner ist es, wenn er minimal ist, d.h. keine überflüssigen Imports wie

Das hatte ich auch gesehen, aber da ich so einen Patch das erste mal erzeugt habe nicht weiter modifiziert. Lässt sich der Patch manuell bearbeiten, oder kommt der Import ganz durcheinander?

(29.08.2010, 12:00)routeconverter Wrote: Und Fehler zu "fressen" ist fürs Ausprobieren ok, da muß natürlich ein Fehlerdialog hin:

+ public void print() {
+ try {
+ getPositionsView().print();
+ } catch (PrinterException e) {
+ e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
+ }
+ }
Hast Du eine passende Stelle in den Sourcen zum Nachschauen?

Grüße,
Ilmari
Reply
#7
(30.08.2010, 09:25)IlmariKrebs Wrote: Wenn ich eine Wegpunktliste bereinigen will, dann geht das relativ geschickt, wenn ich westlich, östlich, nördlich oder südlich alles wegwerfen kann, nur wenn die Liste sortiert ist. Ich benutze EasyGPS hierfür recht häufig.

Das heißt, Du sortierst nach Längen- oder Breitengrad und verwirfst dann alles, was größer oder kleiner als ein gewisser Wert ist?

(30.08.2010, 09:25)IlmariKrebs Wrote: Andere Anwendungen wären in einem Track alle Punkte zu finden wo ein bestimmtes Kriterium erfüllt ist, dann läßt es sich besser in einer sortierten Liste suchen.

Und die ursprüngliche Reihenfolge spielt keine Rolle mehr?

(30.08.2010, 09:25)IlmariKrebs Wrote:
(29.08.2010, 12:00)routeconverter Wrote: Zum Patch: Schöner ist es, wenn er minimal ist, d.h. keine überflüssigen Imports wie

Das hatte ich auch gesehen, aber da ich so einen Patch das erste mal erzeugt habe nicht weiter modifiziert. Lässt sich der Patch manuell bearbeiten, oder kommt der Import ganz durcheinander?

Der Patch ließ sich problemlos anwenden (Version Control/Apply patch... in IDEA).

(30.08.2010, 09:25)IlmariKrebs Wrote: Hast Du eine passende Stelle in den Sourcen zum Nachschauen?

z.B. ConvertPanel#saveFile() zeigt ganz schön das Muster mit Umsetzen des Cursors, Loggen der Exception, Öffnen des Fehlerdialogs:

Quote: private void saveFile(File file, NavigationFormat format, BaseRoute route, int fileCount,
boolean confirmOverwrite, boolean openAfterSave) {

Constants.startWaitCursor(r.getFrame().getRootPane());
try {

[.. tu was ..]

} catch (Throwable t) {
log.severe("Save error " + file + "," + format + ": " + t.getMessage());

JOptionPane.showMessageDialog(r.getFrame(),
MessageFormat.format(RouteConverter.getBundle().getString("save-error"), urlModel.getShortUrl(), targetsAsString, t.getMessage()),
r.getFrame().getTitle(), JOptionPane.ERROR_MESSAGE);
} finally {
Constants.stopWaitCursor(RouteConverter.getInstance().getFrame().getRootPane());
}
}
--
Christian
Reply
#8
(30.08.2010, 10:32)routeconverter Wrote: Das heißt, Du sortierst nach Längen- oder Breitengrad und verwirfst dann alles, was größer oder kleiner als ein gewisser Wert ist?

Ja genau.

(30.08.2010, 10:32)routeconverter Wrote: Und die ursprüngliche Reihenfolge spielt keine Rolle mehr?

Der Vorteil der JTable Sortierung ist, dass die Daten im TableModel nicht modifiziert werden, sondern die Daten in der Sortierreihenfolge angezeigt werden. Man muss lediglich noch die Indices des Views in die Indices im TableModel transformieren. Somit bliebe die Reihenfolge erhalten, die für Routen und Tracks wichtig ist. Für eine Liste von Wegpunkten wäre sie im Falle von Geocaches oder POI nicht wirklich dringend notwendig.

(30.08.2010, 10:32)routeconverter Wrote: private void saveFile(File file, NavigationFormat format, BaseRoute route, int fileCount,
boolean confirmOverwrite, boolean openAfterSave) {

Constants.startWaitCursor(r.getFrame().getRootPane());
try {

[.. tu was ..]

} catch (Throwable t) {
log.severe("Save error " + file + "," + format + ": " + t.getMessage());

JOptionPane.showMessageDialog(r.getFrame(),
MessageFormat.format(RouteConverter.getBundle().getString("save-error"), urlModel.getShortUrl(), targetsAsString, t.getMessage()),
r.getFrame().getTitle(), JOptionPane.ERROR_MESSAGE);
} finally {
Constants.stopWaitCursor(RouteConverter.getInstance().getFrame().getRootPane());
}
}

Habe ich dementsprechend angepasst.

Gruß
Ilmari

Grüße,
Ilmari
Reply
#9
Hallo Christian,

habe noch zwei Patches angefügt:

einmal zum Drucken der Positionsliste + Ergebnis pdf

und ein paar Änderungen, damit man die Positionsliste sortieren kann.

Gruß,

Ilmari


Attached Files
.txt   Sortierung.patch.txt (Size: 4.18 KB / Downloads: 739)
.txt   Print.patch.txt (Size: 2.74 KB / Downloads: 776)
.pdf   positionsliste.pdf (Size: 17.27 KB / Downloads: 783)

Grüße,
Ilmari
Reply
#10
(03.09.2010, 18:19)IlmariKrebs Wrote: habe noch zwei Patches angefügt:

Hallo Ilmari,

vielen Dank dafür. Das Format der Patches ist anders als zuvor:

Index: route-converter/src/main/java/slash/navigation/converter/gui/RouteConverter.java
===================================================================
@@ -801,6 +801,7 @@
+ actionManager.register("print-positions", new PrintPositionsAction());

Das wird nicht als "unified diff" erkannt, dies hier schon:

Index: java/slash/navigation/converter/gui/helper/FrameMenu.java
===================================================================
--- java/slash/navigation/converter/gui/helper/FrameMenu.java (revision 1947)
+++ java/slash/navigation/converter/gui/helper/FrameMenu.java (working copy)
@@ -42,6 +42,7 @@
printMenu.add(JMenuHelper.createItem("print-map"));
printMenu.add(JMenuHelper.createItem("print-map-and-route"));
printMenu.add(JMenuHelper.createItem("print-elevation-profile"));
+ printMenu.add(JMenuHelper.createItem("print-positions"));
fileMenu.add(printMenu);
fileMenu.addSeparator();
fileMenu.add(JMenuHelper.createItem("exit"));


Klar könnte ich das per Hand einsortieren, aber es ist wohl viel leichter und weniger fehlerträchtig, wenn Du die Patches nochmal im unified diff-Format erzeugst, oder?
--
Christian
Reply


Forum Jump:


Users browsing this thread: 4 Guest(s)