20. august 2007 - 09:24Der er
16 kommentarer og 1 løsning
Kan jeg lave scrollpanes inde i et scrollpane?
Hej med jer.
Jeg vil gerne lave et vindue der viser en oversigt over forskellige personer. Da antallet af personer varierer fra fil til fil, skal det være muligt at scrolle op og ned i oversigten.
Mit problem er, at samtidigt med dette ønsker jeg at hver enkelt persons information skal vises i paneler der også kan scrolles i, da informations- og tekstmængden til hver person i teorien varierer fra 0 til uendelig.
Måden det hele er sat op på, er at personernes information står vandret, mens de forskellige personer står lodret - under hinanden.
|Navn------køn-----alder---postnr|-|ekstra information|---------- |Person1---mand-----38-----3521|---|Han er rigtig morgensur|----- |person2---mand-----44-----2456|---|Bliver ofte fuld på barer|-- |person3---kvinde---35-----8834|---|Snakker meget|---------------
Da mængden af skrevet tekst knyttet til hver enkelt person varierer, har jeg delt hver person op i 2 paneler som jeg kan scrolle i. Jeg har angivet panelerne med | for at vise hvor jeg vil have mine scrollpanes hos hver person.
For at opsummere problematikken: Jeg vil altså pakke 2 eller flere scrollepanes ind i et overordnet scrollpane. Mine forsøg hidtil med at gøre dette virker ikke. Mine inderste scrollepanes (dem hos hver person) vises ikke - kun det overordnede(der kan scrolle op og ned mellem personer). Hvordan løser jeg dette problem?
|Navn------køn-----alder---postnr|-|ekstra information|---------- |Person1---mand-----38-----3521|---|Han er rigtig morgensur|-- |person2---mand-----44-----2456|---|Bliver ofte fuld på barer|- |person3---kvinde---35-----8834|---|Snakker meget|------------
JPanel superHolder = new JPanel(); superHolder.setLayout(new BoxLayout(superHolder, BoxLayout.Y_AXIS)); int counter = 0; while(counter < entireListOfContacts.size()){ JPanel forEachContactPanel = new JPanel(); forEachContactPanel.setLayout(new BoxLayout(forEachContactPanel, BoxLayout.X_AXIS)); editButton = new JButton(); editButton.setText("Redigér"); editButton.setName("Edit" + Integer.toString(counter)); editButton.addActionListener(this); forEachContactPanel.add(editButton, null); forEachContactPanel.add(makeInfoPanel(entireListOfContacts.get(counter))); forEachContactPanel.setBorder(labelBorder); superHolder.add(forEachContactPanel); JLabel filler = new JLabel("<html><br><br><br></html>");
superHolder.add(filler); counter++; } JScrollPane superHolderscrollPane = new JScrollPane(superHolder); jContentPane.add(superHolderscrollPane, null);}
Jeg kalder metoden "forEachContactPanel.add(makeInfoPanel(entireListOfContacts.get(counter)));" for at oprette et JPanel med 3 scrollpanes. Metoden "makeInfoPanel(Contact con)", har jeg brugt før i et andet window hvor den virker. Dvs. den opretter og viser helt korrekt de ønskede scrollpanes. Vil lige vente med at poste koden - til det bliver nødvendigt, da den er lidt stor.
Ps. Er der en funktion til at sætte screenshot ind? Tror at det vil gøre det meget lettere at vise.
static String content = "Here men from the planet Earth\n" + "first set foot upon the Moon,\n" + "July 1969, AD.\n" + "We came in peace for all mankind.";
Jeg kan konstatere, entireListOfContacts.size() har den korrekte størrelse, da der bliver oprettet et korrekt antal af personer som vises under hinanden.
For at se hvad jeg mener, kan man se det vindue som jeg gerne skulle ende med på adressen:
Ovenstående billede er opnået vha. billedmanipulation.
For at se hvordan mit vindue pt. ser ud, og som jeg gerne skulle have ændret til at kunne klare scrollpanes inde i scrollpanes, kan det findes på adressen:
Ps. Jeg har kørt din testkode, men den opstiller kun 3 scrollpanes ved siden af hinanden. Det har jeg allerede selv lavet, jeg vil dog gerne putte disse 3 inden i scrollpane... Og det er her at jeg har et problem.
Koden sætter 3 scrollpanes ind i én scrollpane - prøv evt. at gøre vinduet mindre. Så skulle du meget gerne kunne se at de 3 textareas er inde i én overordnet scrollpane.
static String content = "Here men from the planet Earth\n" + "first set foot upon the Moon,\n" + "July 1969, AD.\n" + "We came in peace for all mankind.";
Jeg havde vist ikke lige fået set ordentligt på din kode. Du har ganske ret - det er det som jeg ønsker.
Nu har jeg testet min (lange) kode i metoden makeInfoPanel(Contact con) i en anden sammenhæng og den gør nøjagtigt hvad den skal. Den returnerer et JPanel med de 3 synlige scrollpanes side om side.
Men det går åbenbart galt, når jeg opretter disse JPanels under hinanden i et overordnet scrollpane. De inderste scrollpanes vises ikke længere - kun det overordnede.
For lige at opfriske: Måden hvorpå jeg opretter disse JPanels på og sætter dem under hinanden, sker ved at jeg i while-løkken laver dette metodekald
Dvs. hver metodekald opretter kun et enkelt JPanel men pga. while-løkken oprettes der flere. Hvert af disse indsættes i sit tilhørende JPanel, der hedder forEachContactPanel. Disse forEachContactPanel's står under hinanden i det overordnede scrollpane.
Kan det have noget at gøre med, at jeg pakker resultatet af makeInfoPanel (som virker i andre sammenhænge) ind i andet JPanel og derefter tilføjer det til det overordnede scrollPane?
For at de inderste 3 scrollpanes virker, skal jeg så tilføje dem direkte til det overordnede scrollpane eller burde det være ok at lade dem ligge i deres eget JPanel?
Jeg prøver sideløbende at grave videre og se om jeg kan finde en løsning.
Dit problem er at dine inderste panels må have en maks størrelse der er større end indholdet, så derfor vil du ikke se scrollbars på disse Javas layoutmanager maksimere dine inderste panels og du kan kun minimere din frame og derved kommer kun det overordnede scrollpanel. Så ret layoutmæssigt så er den ret uhensigtsmæssig.
Hmmm... Pokkers. Jeg har genbrugt koden til at generere de 3 inderste scrollpanes (som tidligere skrevet), men det lyder jo lidt som om, at dette ikke lader sig gøre. Er det muligt for mig, at hindre layoutmanageren i at maksimere de inderste panels?
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.