Skip to content

Commit 3b9f9f3

Browse files
authored
Merge pull request #267 from jlawyerorg/develop
sortable tables for rechtspsy01
2 parents dd2eb18 + 57d7bd4 commit 3b9f9f3

File tree

3 files changed

+89
-25
lines changed

3 files changed

+89
-25
lines changed

src/2.6.0.0/rechtspsy01_meta.groovy

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -547,6 +547,6 @@ For more information on this, and how to apply and follow the GNU AGPL, see
547547

548548
name = "Gutachten"
549549
description = "Bearbeitung rechtspsychologischer Gutachten"
550-
version = "1.1.0";
550+
version = "1.2.0";
551551
author = "Jens Kutschke"
552-
updated = "02.12.2025"
552+
updated = "10.12.2025"

src/2.6.0.0/rechtspsy01_ui.groovy

Lines changed: 86 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -670,6 +670,7 @@ import java.time.LocalDate
670670
import java.time.Period
671671
import javax.swing.SwingConstants
672672
import javax.swing.table.DefaultTableModel
673+
import javax.swing.table.TableRowSorter
673674
import java.awt.*
674675
import 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

Comments
 (0)