2010-12-20 12 views
1

Ich möchte benutzerdefinierte Zelle in JTable erstellen. Ich habe einen benutzerdefinierten Renderer verwendet und ein JPanel-Objekt zurückgegeben. Es funktioniert, aber es gibt ein Problem. Während das Programm ausgeführt wird, greift das JPanel mit der Methode paintComponent() auf sich selbst zurück. Auf jedem "Tick" (normalerweise alle 100ms) wird das Panel breiter (I m drawing kind of graph) and when it becomes too big the rest is just hidden. I) Ich mag es, Scrollbar zu skalieren und ScrollPane zu erstellen, aber keiner von ihnen hat funktioniert. Im Grunde möchte ich etwas wie Thread-Ansicht in Java VisualVM.Jede Ideen?Scrollbare JPanel in JTable Zelle

+1

Siehe auch http://stackoverflow.com/questions/4167452 – trashgod

Antwort

1

Es ist harte Arbeit, Scroll-Fenster in eine normale Tabellenzelle zu setzen, da nur eine Komponente verwendet wird, um alle Zellen in Tabelle zu rendern.May kann JTable entfernen und nur große Menge von Komponenten in gewöhnlichen JPanel mit Gitter Layout

Wenn Sie noch JTable verwenden:.

Jedes Bildlauffenster spezielle JViewport Steuerung enthalten Diese JViewport Kontrolle über Scrollen eigentlich alle wo rk und JSrollPane selbst nur mit Bildlaufleisten. Da ein einzelnes Ansichtsfenster für alle Zellen verwendet wird, müssen Sie diese Ansichtsfensterposition speichern und für jede Malzelle (bei getCellRenderer-Methode) wiederherstellen. Aber JSrollPane benötigt viel Layout, also diese sehr langsame Lösung.

Am meisten vorzuziehen Lösung: überschreiben Sie JPane CellRenderer Paint-Methode, und diese Paint-Methode muss Untergrafiken (Graphics.create()) mit ordnungsgemäßem Scroll-Offset erstellen. Scroll-Offset-Daten müssen irgendwo gespeichert werden (z. B. im Tabellenmodell). Wenn der Benutzer auf Zelle klickt, beginnt JTable mit der Zellbearbeitung und installiert den Zelleditor. Dies muss ein spezieller Zelleneditor sein, der das Scrollfenster selbst enthält. Benutzer scroll dieses Steuerelement (keine spezielle Unterstützung erforderlich) und ging er Zellbearbeitung beendet müssen Sie Bildlaufposition zu Modell (in stopCellEditing() -Funktion) speichern. Dann zelle gerenderte Farbe selbst und in der Farbmethode erhalten Inhalt Scroll-Offset vom Modell. Benutzer sieht gescrollte Zelle. Sie können JScrollBar auch in die gerenderte Zelle einfügen, damit der Benutzer die Bildlaufposition sehen kann (aber er benötigt spezielle Unterstützung). Sie können auch JViewport selbst verwenden, um alle Schmerz-Arbeit zu tun, aber in Kontrolle schwer zu verstehen. Ich sehe keine Probleme mit Scroll-Hose in Zelle-Editor verwenden, so muss es funktionieren. In jedem Fall ist es eine riesige Arbeit.

0

Sie haben also einen benutzerdefinierten Tabellenzellen-Renderer eingerichtet, und ich nehme an, dass dieser Renderer eine JScrollPane Ansicht auf einem JPanel ist. Möglicherweise müssen Sie mit den Aufrufen von setPreferredSize() im Bildlauffenster und Aufrufen von setPreferredSize() und/oder setSize() auf dem Bedienfeld (oder dem inneren Element, das im Bildlauf angezeigt wird) spielen, bevor Sie aufrufen, um eine Layoutaktualisierung auszulösen.