Ten CaretListener wydaje się dobrym pomysłem, przynajmniej na początek. Sprawdź o co chodzi z tymi Listenerami w swingu, podpowiem, że używa się ich m.in. do tego aby po kliknięciu na przycisk coś się zrobiło, co wydaje mi się, że wiesz.
To dokładnie tak samo trzeba zrobić z tym CaretListner. Jednym z rozwiązań będzie stworzenie klasy, która implementuje interfejs CaretListener. I ta klasa będzie miała referencje do TextArea i do JLabel. TextArea po to żeby pobrać liczbę znaków (TextArea::getText), a JLabel żeby to wyświetlić. Jest to wydaje mi się najprostsze rozwiązanie, z którym powinieneś dać sobie radę. Na końcu przypisz obiekt tej klasy do odpowiedniego listenera TextArea:
textArea.addCaretListener(new TextAreaContentCounter(textArea, jLabel);