2016-05-26 19 views
2

Welcher Teil des JScrollPane-Codes ist für die Anzeige der Spaltenüberschriften von JTable verantwortlich?JScrollPane - wie zeigt es JTable-Header an?

Wenn Sie nur ein JTable zu einem JPanel hinzufügen, werden die Header standardmäßig nicht angezeigt. Sie sollten entweder die Tabelle an JScrollPanes Konstruktor übergeben oder JScrollPane setViewportView mit der Tabelle als Argument aufrufen. Also, was macht die Spaltenüberschriften sichtbar? Ist es Teil des internen Renderings von JScrollPane (updateUI und getUI Methoden)?

Anfangs dachte ich, JScrollPane verwendet seine setColumnHeaderView, um dies zu erreichen, aber es nicht (NULL zu dieser Methode übergeben, wird die Tabelle immer noch die Überschriften anzeigen).

Antwort

2

Die JTable ist dafür verantwortlich.

Die addNotify() Methode von JTable wird außer Kraft gesetzt. Grundsätzlich wird diese Methode aufgerufen, wenn eine Komponente einem sichtbaren Container hinzugefügt wird.

So überprüft die JTable Implementierung, ob das übergeordnete Element der Tabelle ein JViewport ist. Wenn dies der Fall ist, wird der Tabellenkopf mit der Methode setColumnHeaderView(...) zum Bildlauffenster hinzugefügt.

+0

Gibt es eine Erklärung dafür, warum der Aufruf von setColumnHeaderView die Spaltenüberschriften des Bildlauffensters nicht aktualisiert? Es wird aufgerufen, nachdem ich den Bildlaufbereich instanziiert, die JTable mit setViewPortView hinzugefügt und den Bildlaufbereich zum JPanel hinzugefügt habe. Ich habe versucht mit Repaint oder Revalidate auf verschiedenen Komponenten, kein Ergebnis. Nachdem ich eine andere Tabelle erstellt und den Tabellenkopf daraus extrahiert habe, habe ich ihn an setColumnHeaderView übergeben. Keine Änderung. Wenn ich jedoch setViewportView (null) nach setColumnHeaderView aufruft, zeigt der Bildlaufbereich die Header der zweiten Tabelle an. – user4205580

+0

@ user4205580, Sie können die Spaltenüberschrift des Bildlauffensters ändern, NACHDEM der Rahmen sichtbar ist, nicht vorher. Weil die Tabelle die Spaltenüberschrift setzt, wenn der Rahmen wie oben erklärt sichtbar gemacht wird. Wenn Sie ein Problem haben, veröffentlichen Sie ein [SSCCE] (http://sscce.org/), um das Problem zu demonstrieren. – camickr