2009-03-02 1 views
1

Wir haben einen tabellenbasierten Editor mit einer SWT-Baumtabelle implementiert. Es macht ziemlich genau das, was wir wollen, außer dass wir keine Möglichkeit finden, sicherzustellen, dass die ersten paar Spalten an ihrer Position bleiben, wenn der Benutzer horizontal scrollt (so dass man die gerade bearbeitete Zeile identifizieren kann)."Fixieren" der ersten paar Spalten in einer SWT-Tabelle, um zu verhindern, dass sie horizontal scrollen

Es gibt eine Reihe von Drittanbieter-Tabellensteuerelementen in verschiedenen Graden, die unvollständig oder abgebrochen sind, und ein Snippet, das zeigt, wie zwei Tabellen verwendet werden (die beim vertikalen Scrollen nicht synchron sind).

Was ist der beste Weg, dies zu lösen?

Antwort

1

Diese 'offizielle' SWT snippet macht, was Sie tun wollen, zumindest auf meinem Rechner - es kommt nicht auf vertikale Scroll-Synchronisation. Aber der Preis ist eine zweite Bildlaufleiste - Weg hässlich. Um dies zu verhindern, können Sie im Konstruktor der linken Tabelle den Stil SWT.NO_SCROLL hinzufügen.

das, was verbessern Sie einen Listener auf SWT.Traverse zu beiden Tabellen hinzufügen müssen, die sie synchronisiert, wenn der Benutzer Tasten navigiert verwenden, etwa so:

leftTable.addListener(SWT.Traverse, new Listener() { 

    public void handleEvent(Event event) { 
     rightTable.setTopIndex(leftTable.getTopIndex()); 
    } 
    }); 

Ich würde nicht mit einem anderen Tisch gehen Implementierung, da Sie den größten Vorteil, den Sie mit SWT haben, verlieren: Verwenden Sie ein natives Widget, das in jedem Betriebssystem "richtig" aussieht und sich anfühlt. Wenn Sie das trotzdem tun wollen, ist Grid aus dem Nebula-Projekt viel reifer als das Alpha-Tag impliziert. Ich weiß nicht, ob es tun kann, was Sie wollen.

0

Das "Synchronisierungsproblem" erscheint nur auf MacOs basierend SWT. Wenn Ihre Zielplattform Windows ist, sollten Sie kein Problem mit dem gegebenen SWT-Snippet haben. Es wird mehr Listener geben, um sich an beiden Tabellen zu registrieren, um alle auftretenden Ereignisse zu synchronisieren (zusammenfalten, erweitern, Maus-Scrollen, etc.)