Archief - [PROG][JAVA] Centreren Jpanels

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

yannick

Legacy Member
Goedeavond/nacht :)

Ik zit met een klein "probleem", zijnde, ik weet niet echt hoe ik een panel binnen een panelcentreer.
Wat ik wil bereiken is om een optie panel te maken (verticaal, ong 3 cm breed en 10 cm lang) met daarin "knoppannels" die oa een andere kleur krijgen on hove.

Het probleem dat ik momenteel heb (heb al elke layout manager geprobeerd), ik krijg de panels niet perfect gecentreerd (links plakken ze meestal tegen het andere panel terwijl ze rechts wel een spatie van 1 px hebben, idem met boven en onder).
Het enigste dat mijn verwachtingen waarmaakt is de flowlayout(hier kan je perfect instellen hoeveel spatie je wil), maar tenzij je deze verticaal kan laten werken zit dat er ook al niet in :(.
De mensen van netbeans hebben zo een verticale "optiepanel" in hun optie scherm zoals ik het zou willen maken, als die het kunnen, moet ik da ook kunnen :D.

Ik hoop dat jullie mij wat opweg kunnen helpen :)

mvg
Yannick Wellens

Timmos

Legacy Member
Het gaat dus om meerdere panels die je als één geheel wilt beschouwen, en dat dan centreren? Want dat optievenster van Netbeans heeft er toch 2? Links om te selecteren en dan rechts om de opties in te stellen?

Om te centreren kan je altijd werken met een ComponentListener, denk ik. Vanaf je het venster resizet worden je panelen binnenin op de hoogte gebracht van een ComponentResized event. Dan bepaal je met subPaneel1.setLocation(x, y) de nieuwe locatie.

Maar om weer naar dat Netbeans voorbeeld te gaan; daar worden de componenten toch niet gecentreerd? Enfin, ik bedoel, de strook tussen het vensterkader en het meest linkse paneel blijft even breed. Dan kan je toch evengoed met setLocation(x, y) werken, zonder een ComponentListener? En de rechtse strook is ook even breed.

Het is dus niet zo dat de panelen even breed blijven en in het midden blijven staan, maar ze rekken gewoon uit zodat de stroken tot de vensterranden even breed blijven (en dat geeft een "centreren"-effect).

Kun je nog eens anders formuleren, want nu begrijp ik je probleem maar half.

yannick

Legacy Member
Awel nee, ik bedoel dus da selectie vak :D. Ik weet niet hoe ze dit gedaan hebben, maar ik dacht dat dit 1 groot panel was (dus de "container") met daarin kleinere panels die dienen als knoppen :).
Of is dit "selectiepanel" iets dat al in java zit?

Ik heb het niet goed uitgelegd in het begin, kzie het nu ook :p. Wat ik dus wil bereiken is zo een selectie panel. De vraag die dan uiteraard later komt, hoe in godsnaam kan ik netbeans iets verkrijgen zoals het rechtse gedeelte van de opties in netbeans. Hiermee bedoel dus verschillende panels OVER elkaar zodat ik bij elke knop die ik kies een panel kan laten zien en de rest laat hiden :p. Op die laatste vraag heb ik al ff liggen denken, kzou ni weten hoe ge het doet me de gui builder (incode kunde het wel oplossen, da zal dan maar zo moeten zkr :p)

mvg

jodeman

Legacy Member
breedte en hoogte opvragen en aan de hand van dat uw positie bepalen, geen layout manager gebruiken...

Timmos

Legacy Member
Ge zou da idd met kleine JPanels kunnen doen, die luisteren naar de bewegingen en acties van de muis (dus MouseInputListener en MouseMotionListener). Als ge uw muis erover beweegt krijgt het een ik-ben-klikbaar-kleur en als ge klikt krijgt het een ik-ben-geselecteerd-kleur.

Ge kunt dan afbeeldingskes centraal plaatsen in elk zo'n JPanel zodat ge het effect krijgt vanuit NetBeans.

Indien ge selecteert dan kunt ge ofwel werken met één JPanel rechts waar alle inhoud in komt, bij iedere selectie wordt de huidige inhoud gewist en vervangen door de nieuwe. Maar dat lijkt me geen mooie oplossing.

Bestaat er niet iets zoals tabbladen zonder de 'tabs'?

Eventueel meerdere JPanels gebruiken met verschillende content, en deze dan verwijderen/toevoegen bij een nieuwe selectie aan uw JFrame waar ge in werkt (of JDialog of ...). Werk dan ook met acties.

yannick

Legacy Member
jodeman zei:
breedte en hoogte opvragen en aan de hand van dat uw positie bepalen, geen layout manager gebruiken...

Moete ni latijd ne layout manager gebruiken, kdacht da bij layout manager "null" ge uw componenten gwn ni kunt "layouten" :p

mvg

yannick

Legacy Member
ah, ma flowlayout kan ik ni onder elkaar krijgen ;).

Kunde mss is een stuk code geven waarmee het duidelijker wordt ?
(sry voor al deze vragen :))

mvg

MilM

Legacy Member
FlowLayout is zeer basic.
Ik zou da nie gebruiken als de layout wa meer complex is

Hebt ge al GridBagLayout geprobeerd ?
Daar kunt ge ook spaties instellen en waar je de positie wilt van je panel.

Voor deze zaken maakt de layout gebruik van GridBadConstraints

Je kunt daar gebruik maken van
"fill": een component krijgt bepaald gebied toegewezen. Hiermee kunt ge instellen of je wilt dat het panel zijn voorkeursgrootte behoudt of zich aanpast aan de grootte van het gebied. Bv als de gebruiker het venster vergroot, moet het panel dan ook vergroten of evengroot blijven met gewoon een leemte errond.

"anchor": hier kunt ge instellen waar de component zich moet bevinden in het panel. Gij moet da dus instellen op "CENTER"

En voor de marges:
ipadx en ipady voor interne marges
insets voor externe marges

Normaal volstaat GridBagLayout voor zo goed als alle applicaties.
Tis wel efkes wennen om ermee te werken.

Maar je maakt dus uw panel, en voegt da panel toe aan een ander panel waarbij ge instelt dat het gecentreerd moet staan

Code:
                JPanel binnenpanel ....
                JPanel buitenpanel ....

                GridBagLayout lay = new GridBagLayout();
                GridBagConstraints gbc = new GridBagConstraints();
		buitenpanel.setLayout(lay);

		gbc.anchor = GridBagConstraints.CENTER;
		gbc.gridx = 0;
		gbc.gridy = 0;
		gbc.insets = new Insets(0, 0, 0, 0); //afhankelijk van wat je hir zelf wenst
		
		lay.setConstraints(binnenpanel, gbc);
		buitenpanel.add(binnenpanel);

iets in diene aard

yannick

Legacy Member
MilM zei:
FlowLayout is zeer basic.
Ik zou da nie gebruiken als de layout wa meer complex is

Hebt ge al GridBagLayout geprobeerd ?
Daar kunt ge ook spaties instellen en waar je de positie wilt van je panel.

Voor deze zaken maakt de layout gebruik van GridBadConstraints

Je kunt daar gebruik maken van
"fill": een component krijgt bepaald gebied toegewezen. Hiermee kunt ge instellen of je wilt dat het panel zijn voorkeursgrootte behoudt of zich aanpast aan de grootte van het gebied. Bv als de gebruiker het venster vergroot, moet het panel dan ook vergroten of evengroot blijven met gewoon een leemte errond.

"anchor": hier kunt ge instellen waar de component zich moet bevinden in het panel. Gij moet da dus instellen op "CENTER"

En voor de marges:
ipadx en ipady voor interne marges
insets voor externe marges

Normaal volstaat GridBagLayout voor zo goed als alle applicaties.
Tis wel efkes wennen om ermee te werken.

Maar je maakt dus uw panel, en voegt da panel toe aan een ander panel waarbij ge instelt dat het gecentreerd moet staan

Code:
                JPanel binnenpanel ....
                JPanel buitenpanel ....

                GridBagLayout lay = new GridBagLayout();
                GridBagConstraints gbc = new GridBagConstraints();
		buitenpanel.setLayout(lay);

		gbc.anchor = GridBagConstraints.CENTER;
		gbc.gridx = 0;
		gbc.gridy = 0;
		gbc.insets = new Insets(0, 0, 0, 0); //afhankelijk van wat je hir zelf wenst
		
		lay.setConstraints(binnenpanel, gbc);
		buitenpanel.add(binnenpanel);

iets in diene aard

Da zou het idd wel eens kunnen zijn, ik had me nog ni echt verdiept in gridbag, enkel in gewone grid.

Bedankt voor de hulp allemaal!

grtz

jodeman

Legacy Member
After a container has been created, you can set its layout manager using the setLayout method. For example:

Container contentPane = frame.getContentPane();
contentPane.setLayout(new FlowLayout());

Although we strongly recommend that you use layout managers, you can perform layout without them. By setting a container's layout property to null, you make the container use no layout manager. With this strategy, called absolute positioning, you must specify the size and position of every component within that container. One drawback of absolute positioning is that it does not adjust well when the top-level container is resized. It also does not adjust well to differences between users and systems, such as different font sizes and locales.

kunt zelf aanpassen door breedte en hoogte op te vragen en die events op te vangen :)
bij easyeclipse for desktop is standaard een maker voor view bij! dan kun je gewoon componenten drag & droppen en layout aanpassen. Dat werkt echt enorm snel.

blub

Legacy Member
this.setLocationRelativeTo(null);

en et staat op gelijk welke resolutie int midde :)

yannick

Legacy Member
Merci, ik gebruik nu de laatste oplossing, dus zelf positie kiezen, werkt perfect :D.

grtz
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan