Fix #27 und #29: Mausrad-Seitenwechsel und Seitenanfang in PDF-Vorschau

Bug #27: ScrollEvent-Filter auf PDFView verhindert Seitenwechsel durch Mausrad.
Seitenwechsel sind ausschliesslich ueber die Navigations-Buttons moeglich.
Die Seitenzahl wird nur noch bei Button-Klick aktualisiert.

Bug #29: Nach dem Laden einer PDF und bei Seitenwechsel ueber Buttons wird
die Seite jetzt explizit von oben angezeigt. Der setPage()-Aufruf erfolgt
via Platform.runLater() nach dem Layout-Pass, sodass stets der Seitenanfang
sichtbar ist.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-24 13:30:53 +02:00
parent d3fbfc4094
commit 7e31057bfa
@@ -13,6 +13,7 @@ import com.dlsc.pdfviewfx.PDFView;
import javafx.application.Platform;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.input.ScrollEvent;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.ProgressIndicator;
@@ -104,6 +105,11 @@ public final class PdfPreviewPane {
pdfView.setShowToolBar(false);
pdfView.setId("pdf-preview-view");
// Bug #27: Mausrad-Scrollevents abfangen, damit PDFView keinen Seitenwechsel auslöst.
// Das Mausrad soll ausschließlich innerhalb der aktuellen Seite scrollen.
// Seitenwechsel sind nur über die Navigations-Buttons erlaubt.
pdfView.addEventFilter(ScrollEvent.SCROLL, ScrollEvent::consume);
overlayLabel.setId("pdf-preview-overlay-label");
overlayLabel.setStyle("-fx-text-fill: #555555;");
overlayLabel.setWrapText(true);
@@ -240,11 +246,11 @@ public final class PdfPreviewPane {
return;
}
int targetPage = currentPage - 1;
// PDFView navigiert intern zur vorherigen Seite (0-basiert)
pdfView.setPage(targetPage - 1);
currentPage = targetPage;
updatePageLabel();
updateNavigationButtons();
// Bug #29: Seite nach dem Layout-Pass von oben anzeigen (0-basierter Index)
Platform.runLater(() -> pdfView.setPage(targetPage - 1));
}
private void navigateToNextPage() {
@@ -252,10 +258,11 @@ public final class PdfPreviewPane {
return;
}
int targetPage = currentPage + 1;
pdfView.setPage(targetPage - 1);
currentPage = targetPage;
updatePageLabel();
updateNavigationButtons();
// Bug #29: Seite nach dem Layout-Pass von oben anzeigen (0-basierter Index)
Platform.runLater(() -> pdfView.setPage(targetPage - 1));
}
// --- Asynchrones Laden ---------------------------------------------------
@@ -314,6 +321,8 @@ public final class PdfPreviewPane {
showContent();
updateNavigationButtons();
updatePageLabel();
// Bug #29: Zum Seitenanfang scrollen, nachdem der Layout-Pass abgeschlossen ist
Platform.runLater(() -> pdfView.setPage(0));
LOG.debug("PDF-Vorschau: Rendering erfolgreich {} Seite(n)", totalPages);
} catch (Exception e) {
String msg = classifyLoadException(e);