Problem: Ich habe eine Methode, die eine Liste aus der analysierten ArrayList erstellt. Ich schaffe es, die Liste in der GUI ohne Scrollbar zu zeigen. Ich habe jedoch ein Problem damit, dass nur die Größe von ArrayList angezeigt wird. Das heißt, wenn die Größe 6 ist, sollten in der angezeigten Liste nur 6 Zeilen stehen. Unten ist der Code, den ich verwende. Ich habe versucht, die visibleRowCount
wie folgt zu setzen, aber es funktioniert nicht. Ich habe versucht, das Ergebnis auszudrucken und es zeigt, dass die Änderung vorgenommen wurde.
Um es zusammenzufassen: Ich möchte, dass die JList so viele Zeilen wie die analysierte ArrayList anzeigt, ohne eine Bildlaufleiste .
Hier ist das Bild des Problems:
Hier ist der Link zu den anderen 2, da die Bildauflösung ziemlich groß ist. Ich habe Angst, dass es die Sicht verzerrt:
Die JList 1 und 2 Bilder zeigen es deutlich. Die JList zeigt leere Zeilen an, die ich nicht möchte.
Irgendwelche Ideen? Bitte helfen Sie. Vielen Dank. Bitte lassen Sie mich wissen, wenn ein Bild des Problems benötigt wird, falls ich meine Frage nicht korrekt formuliert habe.
-
Bearbeiten:
%Vor%Wie der textPane in den Container eingefügt wird, wenn das hilft
Noch ein Schnitt:
%Vor%showSuggestionList () wird mein CaretListener genannt, um JScrollPane anzuzeigen, wenn sich das Caret bewegt.
Ich vermute, dass das Layout-Management von textPane
das Problem ist. Von dem, was ich sehen kann, sollte der listForSuggestions
nicht mehr Platz einnehmen, als er benötigt, um diese Elemente anzuzeigen, wenn die bevorzugte Größe respektiert wird.
Der JTextPane
ist also ein Container
, dh Sie können Unterkomponenten hinzufügen. Aber wie sind diese Teilkomponenten ausgelegt? Das hängt vom aktuell verwendeten Layout-Manager ab. Wenn der Layout-Manager die bevorzugte Dimension von listForSuggestios
respektiert, sollte es meiner Meinung nach in Ordnung sein. Nicht sicher aber.
Von dem, was ich sehen kann, erhalten Sie das "Null-Layout", indem Sie einfach JTextPane
instanziieren, was bedeutet, dass Sie, wenn Sie keinen anderen Layout-Manager explizit setzen, die Platzierung / Größenanpassung der Unterkomponenten selbst vornehmen müssen .
Sie könnten versuchen, etwas wie
zu tun %Vor%Hier ist ein komplettes Beispiel
%Vor% Ich denke, der eleganteste Weg ist, einen eigenen Layout-Manager zu erstellen. (Es ist eigentlich ganz einfach.) Und dann, anstatt textPane.add(list)
zu machen, machen Sie textPane.add(list, YourLayoutManager.POPUP_LIST)
. Der Layout-Manager erinnert sich dann daran, dass list
entsprechend seiner bevorzugten Größe angelegt werden sollte, und legt es entsprechend in seiner layoutContainer
-Methode ab. (Wenn Sie der YourLayoutManager
einen Verweis auf die JTextPane
geben, an die sie angehängt ist, könnten Sie möglicherweise sogar das Layout list
direkt neben dem aktuellen Caret-Speicherort erstellen.)
Wenn Sie Ihre Liste dynamisch (über Code) füllen, ist es keine gute Idee, die Bildlaufleiste nicht zu verwenden. Es könnte funktionieren, wie Sie möchten, z. für 20 Listenelemente, aber stellen Sie sich vor, was passiert, wenn Sie mehr Daten benötigen - wie 2000. Ihre GUI wird ruiniert.