Toon posts:

[JAVA] JPanel variabel height, vaste width

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb got en google flink afgezocht, en de Java doc's natuurlijk, maar kom er niet helemaal uit.

Ik heb een JPanel container met een breedte 100 en een hoogte 100. Ik gebruik een flowlayout waarin alles naar links boven uitgelijnd wordt. In de loop van het programma worden aan dit JPanel nieuwe JPanels toegevoegd met een breedte van 100 en een hoogte van 10.

Geef ik geen vaste size aan in container, dan worden de nieuwe JPanels naast elkaar toegevoegd en wordt container steeds breder. DIt is niet de bedoeling. De nieuwe JPanels moeten onder elkaar toegevoegd worden. Om dit te bereiken kan ik door container.setPreferredSize(new Dimension(100,100)); de breedte vast zetten op 100. Werkt prima, maar als er meer dan 10 nieuwe JPanels zijn toegevoegd vallen deze vanaf de 11de buiten beeld. Das opzich logisch. De hoogte moet dus vanaf dat moment groter worden.

Nou leek t mij logisch om setMinimumSize(new Dimension(100,100)) te doen en vervolgens setMaximumSize(new Dimension(100,10000)), in dit geval worden de nieuwe JPanels echter weer gewoon naast elkaar geplaatst en wordt container dus steeds breder. setMaximumSize doet dus op de 1ofandere manier nix.

Helaas kon ik ook niet zoiets als setPreferredWidth vinden, dus zit ik hier een beetje vast. Iemand enig idee hoe je wel de breedte fixed kan maken en de hoogte variabel??..

Verwijderd

Ik snap het nut niet echt om op een dergelijke manier de parent component van vorm te veranderen maareh zou een BoxLayout met Y-as orientatie niet geschikter zijn voor dit soort dingen?
Als het dan toch echt moet kan je vast wel met een listener opmerken wanneer de parent van afmetingen moet veranderen en hoeveel.

  • Jelmer
  • Registratie: Maart 2000
  • Laatst online: 06:55
GridBagLayout?

GridBagConstraints gbc = new GridBagConstraints();
gbc.gridy=0; //eerste regel, kolomen worden dan bepaald op volgorde van toevoegen
gbc.fill = GridBagConstraints.VERTICAL; //hoogte mag variëren
gbc.weighty = 1;

add(<JComponent>, gbc);

Succes

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

ALs je dit soort zaken wilt doen, kun je dit het beste overlaten aan een LayoutManager. In jouw geval zou een HorizontalFlowLayout of een VerticalFlowLayout de oplossing zijn. Je hoeft zelf alleen nog maar de preferred size in te stellen, want met die max en min sizes wordt geen kont gedaan.

Een van de FlowLayouts zit standaard bij de jdk in, de andere moet je uit JBuilder slopen :P of ergens op het internet opzoeken. Hij is wel te vinden.

Afbeeldingslocatie: http://www.alarmnummer.net/2.PNG

Ik doe dit hier ook bij het vragenoverzicht. Vraag-componenten worden dynamisch aan een container toegevoegd en ik werk ook fijn met een FlowLayout.

[ Voor 21% gewijzigd door Alarmnummer op 13-05-2004 08:34 ]


  • NetForce1
  • Registratie: November 2001
  • Laatst online: 23-03 10:29

NetForce1

(inspiratie == 0) -> true

[off-topic]Welke l33t3 l&f gebruik je daar?[/off-topic]

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


Verwijderd

Topicstarter
Alarmnummer schreef op 13 mei 2004 @ 08:31:
...want met die max en min sizes wordt geen kont gedaan...
Maar waar zijn die min en max sizes dan voor bedoeld??...ze zullen toch niet gewoon een methode geschreven hebben die nix doet :?

De BoxLayout werkt op zich trouwens goed, allen moet ik dan nog even iets verzinnen om de nieuwe JPanels naar boven toe uit te lijnen, ze worden nu verdeeld over de hoogte, dus als ik er maar 2 zou hebben, zit er 40 tussen....
Maar ik had al iets als Box.Filler gezien of een createVerticalGlue ofzo...gaat wel lukken :)

Die VerticalFlowLayout zal ik ook even bekijken, ook al wilde ik t liefst alles met de standaard libraries doen van 1.4.2..

MAar iig bedankt!

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

NetForce1 schreef op 13 mei 2004 @ 09:31:
[off-topic]Welke l33t3 l&f gebruik je daar?[/off-topic]
www.jgoodies.com
Maar waar zijn die min en max sizes dan voor bedoeld??...ze zullen toch niet gewoon een methode geschreven hebben die nix doet
Ik zou het niet weten :P
De BoxLayout werkt op zich trouwens goed, allen moet ik dan nog even iets verzinnen om de nieuwe JPanels naar boven toe uit te lijnen, ze worden nu verdeeld over de hoogte, dus als ik er maar 2 zou hebben, zit er 40 tussen....
Maar ik had al iets als Box.Filler gezien of een createVerticalGlue ofzo...gaat wel lukken
Ik werk of met hele eenvoudige layouts, en anders grijp ik naar de FormLayout van jgoodies. Daarmee kan je echt alles voor elkaar krijgen.

[ Voor 66% gewijzigd door Alarmnummer op 13-05-2004 10:18 ]


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 25-05 16:59

Robtimus

me Robtimus no like you

Verwijderd schreef op 13 mei 2004 @ 09:43:
[...]


Maar waar zijn die min en max sizes dan voor bedoeld??...ze zullen toch niet gewoon een methode geschreven hebben die nix doet :?
Die zijn meer een advies voor de LayoutManager. Dat die zich er soms niet aan houdt ligt dan aan de LayoutManager. De betere LM's houden zich er IMHO aan (als in: pas als hij zich eraan houdt is het een van de betere LM's).
De BoxLayout werkt op zich trouwens goed, allen moet ik dan nog even iets verzinnen om de nieuwe JPanels naar boven toe uit te lijnen, ze worden nu verdeeld over de hoogte, dus als ik er maar 2 zou hebben, zit er 40 tussen....
Maar ik had al iets als Box.Filler gezien of een createVerticalGlue ofzo...gaat wel lukken :)

Die VerticalFlowLayout zal ik ook even bekijken, ook al wilde ik t liefst alles met de standaard libraries doen van 1.4.2..

MAar iig bedankt!
Soms voldoen de standaard LayoutManagers helaas niet. Dan zit er niks anders op dan een 3rd party LM gebruiken, of er zelf 1 schrijven.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


Verwijderd

afaik neemt ie altijd de preferred layout. De min en maximum layouts dienen om een min-max in te stellen voor het resizen van een component. Bijvoorbeeld als je het venster steeds kleiner maakt dan zal op een bepaald punt opgemerkt worden dat het inzittende component niet kleiner kan. Op dat moment komt er een scrollbalk in beeld als je tenminste een JScrollPane gebruikt hebt.
Zoniet dan denk ik dat hij gewoon stopt met de componenten binnen de Container te managen en stukken ervan werkelijk uit het beschikbare beeld vallen.

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 25-05 16:59

Robtimus

me Robtimus no like you

Een JSplitPane gebruikt die min en max geloof ik wel volledig, mits mogelijk.

Als in: de split kan niet verder verschoven worden.

[ Voor 27% gewijzigd door Robtimus op 13-05-2004 13:25 ]

More than meets the eye
There is no I in TEAM... but there is ME
system specs

Pagina: 1