06.09.2010, 07:47
(05.09.2010, 13:08)IlmariKrebs Wrote: Das Sortieren der Positionsliste funktioniert so nun. Was noch gemacht werden müsste ist für jede Spalte eine spezifische Compare funktion zu erzeugen.
Prima.
(05.09.2010, 13:08)IlmariKrebs Wrote: Aber das würde ich erst machen/erforschen, wenn Du das Sortieren, wie ich es jetzt implementiert habe, akzeptierst.
Ich habe im Moment überhaupt keinen Überblick, ob das irgendwo noch Seiteneffekte haben kann.
Ich auch nicht... bislang hatte ich kaum Anfragen nach dem Sortieren und alle Funktionen im Programm wirken bislang direkt auf den Daten. Die Ausnahme ist das Kontextmenü im Tabellenkopf - sie blendet Daten ein und aus.
Wo ich grüble ist, ob Sortier- und Filterfunktionen nun direkt auf den Daten wirken sollen oder nur die Ansicht der Daten beeinflussen sollten wie in Deinem Vorschlag. Ich fürchte die vielen Supportanfragen, wenn Nutzer genau das andere erwarten, was implementiert ist

Aus Usability-Sicht wäre die Wirkung der Sortieroperation zu klären, diese ggfs. ins Undo/Redo zu integrieren, es bräuchte eine Möglichkeit, die Ansicht zum Lade-Zeitpunkt wiederherzustellen. Und einen bloßen Klick auf den Tabellenkopf werden die meisten nicht als Sortieraufforderung verstehen, d.h. das Kontextmenü und die Menüzeile wären zu erweitern. Für die nächste Version ist das zu viel - ich warte nur darauf, daß die Website fertig wird und will dann releasen.
Den Konflikt, ob Sortier- und Filterfunktionen nun direkt auf den Daten wirken sollen oder nur die Ansicht der Daten beeinflussen sollten wie in Deinem Vorschlag, sieht man auch auf technischer Sicht. Ich habe den JTable bewußt als Liste gebraucht, die Spaltenorientierung bringt dann Fehler wie diesen hervor:
Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: column beyond range of TableModel
at javax.swing.DefaultRowSorter.checkColumn(DefaultRowSorter.java:1202)
at javax.swing.DefaultRowSorter.toggleSortOrder(DefaultRowSorter.java:435)
at javax.swing.plaf.basic.BasicTableHeaderUI$MouseInputHandler.mouseClicked(BasicTableHeaderUI.java:96)
at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:253)
at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:252)
at java.awt.Component.processMouseEvent(Component.java:6270)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6032)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4247)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
--
Christian
Christian