*Unendlich* Labels zur Laufzeit?

ellion

Erfahrenes Mitglied
Hallo Forum :D

Ich habe ein (wahrscheinlich kleines) Problem. Ich würde gerne X JLabels zur Laufzeit generieren, habe aber momentan keine Idee, wie ich das mache? Angesprochen werden müsste jedes nur einmal.

Ich programmiere eine Art Planer, bei dem ich eine Zeitleiste einbauen will. Da ich aber die genaue Position jedes Labels brauche wollte ich diese einfach per Schleife in einem AbsoluteLayout generieren lassen.

Für andere Ideen gibt bin ich auch immer dankbar :D

Gruß,
daniel
 
Wenn Du nicht weißt, wieviele JLabels Du haben wirst, ist es z.B. möglich, mit einem FlowLayout zu arbeiten.

Sollen diese JLabels alle übereinander stehen, nimmst Du ein JPanel, definierst die bevorzugte Breite mit der Breite der JLabels und läßt die Vorzugshöhe wie sie ist. Diesem JPanel fügst Du dann nach Lust und Laune beliebig viele JLabels hinzu. Das JPanel bringst Du in einem JScrollPane unter und erlaubst nur das Scrollen nach unten und oben. Die Maße des JScrollPanels richten sich nun nach dessen Einbettung in einem höherwertigen JPanel oder den JFrame.
 
Ah super, das werd' ich gleich morgen mal ausprobieren. Hab gerad schon Mantel und Schirm in der Hand und geh nach Hause :D
 
Mh, bei mir funktioniert das nicht so ganz...

Ich hab ein JScrollPane, darin befindet sich ein ein JPanel (mit dem Layout "null") und in dem JPanel sind diverse JLabels. Soweit so klar.
Beim Laden ist keines der Labels sichtbar, auch die Ausrichtung der Labels passiert erst bei Laufzeit. Funktioniert auch so weit, nur bekomm ich keine horizontale Scrollbar >_<
 
Versuch mal:

ScrollPanel.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
 
Hab ich schon. Sie wird ja auch angezeigt (hab ich vorhin vielleicht falsch formuliert, sorry), aber sie ist nicht scrollbar... obwohl das JPanel definitiv eine grössere Höhe hat als das JScrollPane... das gibt Java auch offen zu... nur scrollen kann ich dennoch nicht ^^;
 
Ah, ich hab rausgefunden, wie man das Problem behebt: und zwar benutze man nicht setBounds() sondern setLocation() und setPreferredSize(). (Siehe Codeauszug unten als BSP).

Code:
    Rectangle r = scroll.getBounds();
    pan.setBounds(r.x, r.y, r.width, hoehe);
    pan.setPreferredSize(new Dimension(r.width, hoehe));
    pan.setLocation(r.x, r.y);

(pan = JPanel(); scroll = JScrollPane(); hoehe = vorher berechneter Hoehen-Integer)
 

Neue Beiträge

Zurück