@@ -670,6 +670,7 @@ import java.time.LocalDate
670670import java.time.Period
671671import javax.swing.SwingConstants
672672import javax.swing.table.DefaultTableModel
673+ import javax.swing.table.TableRowSorter
673674import java.awt.*
674675import javax.swing.*
675676
@@ -869,7 +870,25 @@ public class rechtspsy01_ui implements com.jdimension.jlawyer.client.plugins.for
869870 public rechtspsy01_ui () {
870871 super ();
871872 }
872-
873+
874+ // Comparator für Datumssortierung im Format dd.MM.yyyy
875+ private Comparator<String > createDateComparator () {
876+ return new Comparator<String > () {
877+ SimpleDateFormat sdf = new SimpleDateFormat (" dd.MM.yyyy" )
878+ int compare (String s1 , String s2 ) {
879+ if (s1 == null || s1. trim(). isEmpty()) return (s2 == null || s2. trim(). isEmpty()) ? 0 : 1
880+ if (s2 == null || s2. trim(). isEmpty()) return -1
881+ try {
882+ Date d1 = sdf. parse(s1)
883+ Date d2 = sdf. parse(s2)
884+ return d1. compareTo(d2)
885+ } catch (Exception e) {
886+ return s1. compareTo(s2)
887+ }
888+ }
889+ }
890+ }
891+
873892 public String getAsHtml () {
874893 return GuiLib . getAsHtml(this . SCRIPTPANEL );
875894 }
@@ -1653,9 +1672,10 @@ public class rechtspsy01_ui implements com.jdimension.jlawyer.client.plugins.for
16531672 }
16541673 td {
16551674 button(text : ' Markierte Zeile löschen' , actionPerformed : {
1656- int selectedRow = tblFristverlaengerungen. getSelectedRow();
1657- if (selectedRow >= 0 ) {
1658- fristverlaengerungenTableModel. removeRow(selectedRow);
1675+ int viewRow = tblFristverlaengerungen. getSelectedRow();
1676+ if (viewRow >= 0 ) {
1677+ int modelRow = tblFristverlaengerungen. convertRowIndexToModel(viewRow);
1678+ fristverlaengerungenTableModel. removeRow(modelRow);
16591679 syncFristverlaengerungenToJson();
16601680 } else {
16611681 JOptionPane . showMessageDialog(SCRIPTPANEL ,
@@ -1691,6 +1711,12 @@ public class rechtspsy01_ui implements com.jdimension.jlawyer.client.plugins.for
16911711 // Spaltenbreiten nach Erstellung setzen
16921712 tblFristverlaengerungen. getColumnModel(). getColumn(0 ). setPreferredWidth(100 ); // Datum
16931713 tblFristverlaengerungen. getColumnModel(). getColumn(1 ). setPreferredWidth(400 ); // Anmerkung
1714+
1715+ // Datumssortierung aktivieren
1716+ def fristverlaengerungenSorter = new TableRowSorter (fristverlaengerungenTableModel)
1717+ fristverlaengerungenSorter. setComparator(0 , createDateComparator())
1718+ tblFristverlaengerungen. setRowSorter(fristverlaengerungenSorter)
1719+ fristverlaengerungenSorter. setSortKeys([new RowSorter.SortKey (0 , SortOrder . DESCENDING )])
16941720 }
16951721 }
16961722 }
@@ -3034,9 +3060,10 @@ public class rechtspsy01_ui implements com.jdimension.jlawyer.client.plugins.for
30343060 }
30353061 td {
30363062 button(text : ' Markierte Zeile löschen' , actionPerformed : {
3037- int selectedRow = tblCommLog. getSelectedRow();
3038- if (selectedRow >= 0 ) {
3039- commLogTableModel. removeRow(selectedRow);
3063+ int viewRow = tblCommLog. getSelectedRow();
3064+ if (viewRow >= 0 ) {
3065+ int modelRow = tblCommLog. convertRowIndexToModel(viewRow);
3066+ commLogTableModel. removeRow(modelRow);
30403067 syncTableToJson();
30413068 } else {
30423069 JOptionPane . showMessageDialog(SCRIPTPANEL ,
@@ -3075,6 +3102,12 @@ public class rechtspsy01_ui implements com.jdimension.jlawyer.client.plugins.for
30753102 tblCommLog. getColumnModel(). getColumn(2 ). setPreferredWidth(120 ); // Adressat
30763103 tblCommLog. getColumnModel(). getColumn(3 ). setPreferredWidth(100 ); // Form
30773104 tblCommLog. getColumnModel(). getColumn(4 ). setPreferredWidth(360 ); // Inhalt
3105+
3106+ // Datumssortierung aktivieren
3107+ def commLogSorter = new TableRowSorter (commLogTableModel)
3108+ commLogSorter. setComparator(0 , createDateComparator())
3109+ tblCommLog. setRowSorter(commLogSorter)
3110+ commLogSorter. setSortKeys([new RowSorter.SortKey (0 , SortOrder . DESCENDING )])
30783111 }
30793112 }
30803113 }
@@ -3200,9 +3233,10 @@ public class rechtspsy01_ui implements com.jdimension.jlawyer.client.plugins.for
32003233 }
32013234 td {
32023235 button(text : ' Markierte Zeile löschen' , actionPerformed : {
3203- int selectedRow = tblUntersuchungstermine. getSelectedRow();
3204- if (selectedRow >= 0 ) {
3205- untersuchungstermineTableModel. removeRow(selectedRow);
3236+ int viewRow = tblUntersuchungstermine. getSelectedRow();
3237+ if (viewRow >= 0 ) {
3238+ int modelRow = tblUntersuchungstermine. convertRowIndexToModel(viewRow);
3239+ untersuchungstermineTableModel. removeRow(modelRow);
32063240 syncUntersuchungstermineToJson();
32073241 } else {
32083242 JOptionPane . showMessageDialog(SCRIPTPANEL ,
@@ -3240,6 +3274,12 @@ public class rechtspsy01_ui implements com.jdimension.jlawyer.client.plugins.for
32403274 tblUntersuchungstermine. getColumnModel(). getColumn(1 ). setPreferredWidth(80 ); // Uhrzeit
32413275 tblUntersuchungstermine. getColumnModel(). getColumn(2 ). setPreferredWidth(200 ); // Beteiligte/r
32423276 tblUntersuchungstermine. getColumnModel(). getColumn(3 ). setPreferredWidth(500 ); // Anmerkungen
3277+
3278+ // Datumssortierung aktivieren
3279+ def untersuchungsTermineSorter = new TableRowSorter (untersuchungstermineTableModel)
3280+ untersuchungsTermineSorter. setComparator(0 , createDateComparator())
3281+ tblUntersuchungstermine. setRowSorter(untersuchungsTermineSorter)
3282+ untersuchungsTermineSorter. setSortKeys([new RowSorter.SortKey (0 , SortOrder . DESCENDING )])
32433283 }
32443284 }
32453285 }
@@ -3371,9 +3411,10 @@ public class rechtspsy01_ui implements com.jdimension.jlawyer.client.plugins.for
33713411 }
33723412 td {
33733413 button(text : ' Markierte Zeile löschen' , actionPerformed : {
3374- int selectedRow = tblInformatBefragungen. getSelectedRow();
3375- if (selectedRow >= 0 ) {
3376- informatBefragungenTableModel. removeRow(selectedRow);
3414+ int viewRow = tblInformatBefragungen. getSelectedRow();
3415+ if (viewRow >= 0 ) {
3416+ int modelRow = tblInformatBefragungen. convertRowIndexToModel(viewRow);
3417+ informatBefragungenTableModel. removeRow(modelRow);
33773418 syncInformatBefragungenToJson();
33783419 } else {
33793420 JOptionPane . showMessageDialog(SCRIPTPANEL ,
@@ -3411,6 +3452,12 @@ public class rechtspsy01_ui implements com.jdimension.jlawyer.client.plugins.for
34113452 tblInformatBefragungen. getColumnModel(). getColumn(1 ). setPreferredWidth(80 ); // Uhrzeit
34123453 tblInformatBefragungen. getColumnModel(). getColumn(2 ). setPreferredWidth(200 ); // Beteiligte/r
34133454 tblInformatBefragungen. getColumnModel(). getColumn(3 ). setPreferredWidth(500 ); // Anmerkungen
3455+
3456+ // Datumssortierung aktivieren
3457+ def informatBefragungenSorter = new TableRowSorter (informatBefragungenTableModel)
3458+ informatBefragungenSorter. setComparator(0 , createDateComparator())
3459+ tblInformatBefragungen. setRowSorter(informatBefragungenSorter)
3460+ informatBefragungenSorter. setSortKeys([new RowSorter.SortKey (0 , SortOrder . DESCENDING )])
34143461 }
34153462 }
34163463 }
@@ -3519,9 +3566,10 @@ public class rechtspsy01_ui implements com.jdimension.jlawyer.client.plugins.for
35193566 }
35203567 td {
35213568 button(text : ' Markierte Zeile löschen' , actionPerformed : {
3522- int selectedRow = tblSchweigepflicht. getSelectedRow();
3523- if (selectedRow >= 0 ) {
3524- schweigepflichtTableModel. removeRow(selectedRow);
3569+ int viewRow = tblSchweigepflicht. getSelectedRow();
3570+ if (viewRow >= 0 ) {
3571+ int modelRow = tblSchweigepflicht. convertRowIndexToModel(viewRow);
3572+ schweigepflichtTableModel. removeRow(modelRow);
35253573 syncSchweigepflichtToJson();
35263574 } else {
35273575 JOptionPane . showMessageDialog(SCRIPTPANEL ,
@@ -3558,6 +3606,12 @@ public class rechtspsy01_ui implements com.jdimension.jlawyer.client.plugins.for
35583606 tblSchweigepflicht. getColumnModel(). getColumn(0 ). setPreferredWidth(100 ); // Datum
35593607 tblSchweigepflicht. getColumnModel(). getColumn(1 ). setPreferredWidth(200 ); // Beteiligte/r
35603608 tblSchweigepflicht. getColumnModel(). getColumn(2 ). setPreferredWidth(500 ); // Anmerkungen
3609+
3610+ // Datumssortierung aktivieren
3611+ def schweigepflichtSorter = new TableRowSorter (schweigepflichtTableModel)
3612+ schweigepflichtSorter. setComparator(0 , createDateComparator())
3613+ tblSchweigepflicht. setRowSorter(schweigepflichtSorter)
3614+ schweigepflichtSorter. setSortKeys([new RowSorter.SortKey (0 , SortOrder . DESCENDING )])
35613615 }
35623616 }
35633617 }
@@ -3699,8 +3753,9 @@ public class rechtspsy01_ui implements com.jdimension.jlawyer.client.plugins.for
36993753 }
37003754 td {
37013755 btnBefundAktualisieren= button(text : ' Auswahl aktualisieren' , actionPerformed : {
3702- int selectedRow = tblBefund. getSelectedRow();
3703- if (selectedRow >= 0 ) {
3756+ int viewRow = tblBefund. getSelectedRow();
3757+ if (viewRow >= 0 ) {
3758+ int selectedRow = tblBefund. convertRowIndexToModel(viewRow);
37043759 // Ausgewählte Zeile mit den Werten aus den Eingabefeldern aktualisieren
37053760 befundTableModel. setValueAt(txtBefundDate. text, selectedRow, 0 );
37063761 befundTableModel. setValueAt(txtBefundInstitution. text, selectedRow, 1 );
@@ -3730,8 +3785,9 @@ public class rechtspsy01_ui implements com.jdimension.jlawyer.client.plugins.for
37303785 }
37313786 td {
37323787 button(text : ' Markierte Zeile löschen' , actionPerformed : {
3733- int selectedRow = tblBefund. getSelectedRow();
3734- if (selectedRow >= 0 ) {
3788+ int viewRow = tblBefund. getSelectedRow();
3789+ if (viewRow >= 0 ) {
3790+ int selectedRow = tblBefund. convertRowIndexToModel(viewRow);
37353791 befundTableModel. removeRow(selectedRow);
37363792 // Felder zurücksetzen
37373793 txtBefundDate. setText(" " );
@@ -3778,11 +3834,19 @@ public class rechtspsy01_ui implements com.jdimension.jlawyer.client.plugins.for
37783834 tblBefund. getColumnModel(). getColumn(3 ). setPreferredWidth(100 ); // Eingangsdatum
37793835 tblBefund. getColumnModel(). getColumn(4 ). setPreferredWidth(70 ); // Erledigt
37803836
3837+ // Datumssortierung aktivieren (Spalte 0: Datum, Spalte 3: Eingangsdatum)
3838+ def befundSorter = new TableRowSorter (befundTableModel)
3839+ befundSorter. setComparator(0 , createDateComparator())
3840+ befundSorter. setComparator(3 , createDateComparator())
3841+ tblBefund. setRowSorter(befundSorter)
3842+ befundSorter. setSortKeys([new RowSorter.SortKey (0 , SortOrder . DESCENDING )])
3843+
37813844 // SelectionListener für Tabelle hinzufügen
37823845 tblBefund. getSelectionModel(). addListSelectionListener({ e ->
37833846 if (! e. getValueIsAdjusting()) {
3784- int selectedRow = tblBefund. getSelectedRow();
3785- if (selectedRow >= 0 ) {
3847+ int viewRow = tblBefund. getSelectedRow();
3848+ if (viewRow >= 0 ) {
3849+ int selectedRow = tblBefund. convertRowIndexToModel(viewRow);
37863850 // Werte der ausgewählten Zeile in die Eingabefelder laden
37873851 txtBefundDate. setText(befundTableModel. getValueAt(selectedRow, 0 )?. toString() ?: " " );
37883852 txtBefundInstitution. setText(befundTableModel. getValueAt(selectedRow, 1 )?. toString() ?: " " );
0 commit comments