Więc pracuję z JTable
, który jest związany z niestandardowym modelem danych własnych. To wszystko jest funkcjonalne, ale problem, który mam, polega na tym, że za każdym razem, gdy dokonuję zmiany w tabeli (zwalnianie tableDataChanged, tableStructureChanged itd.), Wszystkie szerokości kolumn resetują się do wartości domyślnych. Rozumiem z badania, że ma to związek z domyślnie przypisanym TableColumnModel
. Poza tym resetowaniem, jestem zadowolony z funkcjonalności DefaultTableColumnModel
, ale chciałbym zachować szerokość kolumn, jeśli użytkownik powinien zmienić ich rozmiar (przeciągając krawędź nagłówka kolumny).Jak mogę zachować zdefiniowane przez użytkownika szerokości kolumn w JTable?
Jestem świadomy setPreferredWidth()
dla TableColumns i udało mi się to zrobić pomyślnie; Przypuszczam, że moje pytanie brzmi, jakiego rodzaju zdarzeń powinienem słuchać, aby zapisać i ustawić tę preferowaną szerokość. Próbowałem dodać PropertyChangeListener
do nagłówka tabeli, ale otrzymałem StackOverflow za każdym razem, gdy próbowałem zmienić rozmiar (zakładam, że był uruchomiony rekursywnie). Nie ma problemu z dodaniem dodatkowego elementu danych w modelu danych dla szerokości kolumn i przechowywaniem go tam, ale po prostu nie wiem kiedy/jak ustawić te szerokości, aby nie zostały one nadpisane przez fireTableStructureChanged()
, itp. wydarzenia. Myśli?
Przed zamknięciem procesu należy przeczytać szerokości kolumn i zapisać je w pliku właściwości. Po otwarciu procesu przeczytaj plik właściwości i, jeśli istnieje, ustaw szerokość kolumn. Może być konieczne rozszerzenie obiektu DefaultTableColumnModel, aby możliwe było kontrolowanie szerokości kolumn. –
To faktycznie robi to przy każdym wywołaniu fireTableStructureChanged(), nie tylko na początku programu, więc jeśli dodaję lub usuwam kolumny w modelu danych (gdzie musi on odnawiać kolumny), robi to. Próbowałem przesłonić 'fireTableStructureChanged()', aby ręcznie ustawić szerokość kolumn, ale wygląda na to, że nie ma żadnego efektu. Chyba po prostu nie jestem pewien, gdzie dokładnie występuje to generowanie kolumn i gdzie go przesłonić. – kcoppock
Zawsze robiłem szerokości kolumn z danymi. Jeśli coś znajdę, udzielę odpowiedzi. –