Fix #47: Hinweisbereich im Verarbeitungslauf-Tab verbessert

- Padding unterhalb der Selektions-Button-Leiste ergaenzt
- Hinweisbereich wird nur eingeblendet wenn eine Meldung vorliegt
- Farbliche Unterscheidung: Erfolg gruen, Fehler rot, neutral Standard

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-27 14:01:32 +02:00
parent 03b23eb6a9
commit d9670ddfbe
@@ -524,13 +524,16 @@ public final class GuiBatchRunTab {
HBox selectionButtonBar = new HBox(SECONDARY_SPACING, reprocessButton, resetStatusButton);
selectionButtonBar.setAlignment(Pos.CENTER_LEFT);
selectionButtonBar.setPadding(new Insets(SECONDARY_SPACING / 2, 0, 0, 0));
selectionButtonBar.setPadding(new Insets(SECONDARY_SPACING / 2, 0, SECONDARY_SPACING / 2, 0));
// Meldungsbereich unterhalb der Selektions-Buttons (linke Spalte)
messageArea.setId("batch-run-message-area");
messageArea.setEditable(false);
messageArea.setWrapText(true);
messageArea.setPrefRowCount(3);
// Hinweisbereich erst einblenden wenn eine Meldung vorliegt
messageArea.setVisible(false);
messageArea.setManaged(false);
// Linke Spalte: Tabelle wächst, Buttons und Meldungsbereich darunter
VBox leftColumn = new VBox(0, tableScroll, selectionButtonBar, messageArea);
@@ -1174,6 +1177,9 @@ public final class GuiBatchRunTab {
fileNameEditor.clearSelection();
pdfPreview.clear();
messageArea.clear();
messageArea.setVisible(false);
messageArea.setManaged(false);
messageArea.setStyle(null);
resetMetrics();
updateCounterLabel();
progressBar.setProgress(0);
@@ -1326,6 +1332,14 @@ public final class GuiBatchRunTab {
private void showMessage(String message) {
messageArea.setText(message);
boolean hatInhalt = message != null && !message.isBlank();
messageArea.setVisible(hatInhalt);
messageArea.setManaged(hatInhalt);
if (hatInhalt) {
applyMessageStyle(message);
} else {
messageArea.setStyle(null);
}
}
private void appendMessage(String message) {
@@ -1334,6 +1348,28 @@ public final class GuiBatchRunTab {
} else {
messageArea.setText(messageArea.getText() + System.lineSeparator() + message);
}
messageArea.setVisible(true);
messageArea.setManaged(true);
applyMessageStyle(messageArea.getText());
}
/**
* Passt die Hintergrundfarbe des Hinweisbereichs dem Meldungsinhalt an.
* Fehlermeldungen erhalten einen roten, Erfolgsmeldungen einen grünen Hintergrund.
*
* @param text aktueller Inhalt des Hinweisbereichs
*/
private void applyMessageStyle(String text) {
String lower = text == null ? "" : text.toLowerCase(Locale.ROOT);
if (lower.contains("fehler") || lower.contains("fehlgeschlagen")
|| lower.contains("nicht gefunden") || lower.contains("nicht möglich")) {
messageArea.setStyle("-fx-control-inner-background: #ffebee;");
} else if (lower.contains("kopiert") || lower.contains("gespeichert")
|| lower.contains("erfolgreich")) {
messageArea.setStyle("-fx-control-inner-background: #e8f5e9;");
} else {
messageArea.setStyle(null);
}
}
private void updateCounterLabel() {