Avatar billede aitnemed Novice
20. august 2007 - 09:24 Der 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?

På forhånd tak
Avatar billede aitnemed Novice
20. august 2007 - 09:26 #1
|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|------------

Håber det står rigtigt nu.
Avatar billede snoop_one Nybegynder
20. august 2007 - 12:37 #2
Kunne vi se noget kode?
Avatar billede aitnemed Novice
20. august 2007 - 12:56 #3
Nedenstående stykke kode opretter det omtalte øverste scrollpane:



jContentPane.setLayout(new BoxLayout(getJContentPane(), BoxLayout.Y_AXIS));
               
                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.
Avatar billede aitnemed Novice
20. august 2007 - 13:02 #4
For lige kort at præcisere: makeInfoPanel(Contact con) returnerer et JPanel med 2 scrollpanes og deres dertilhørende indhold.
Avatar billede aitnemed Novice
20. august 2007 - 13:02 #5
Hov forkert tast. Den returnerer 3 scrollpanes.
Avatar billede snoop_one Nybegynder
30. august 2007 - 09:30 #6
Kan du inden din while løkke lave en sysout på  entireListOfContacts.size()? og se om den har den rette størrelse?
Avatar billede snoop_one Nybegynder
30. august 2007 - 09:39 #7
import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class Jscrollpane {

    public static void main(String[] args) {
        JFrame f = new JFrame("Text Area Examples");
        JPanel lowerPanel = new JPanel();
       
        f.getContentPane().add(new JScrollPane(lowerPanel));
       
        lowerPanel.add(new JScrollPane(new JTextArea(content, 6, 8)));
        JTextArea ta = new JTextArea(content, 6, 8);
        ta.setLineWrap(true);
        lowerPanel.add(new JScrollPane(ta));

        ta = new JTextArea(content, 6, 8);
        ta.setLineWrap(true);
        ta.setWrapStyleWord(true);
        lowerPanel.add(new JScrollPane(ta));

        f.pack();
        f.setMinimumSize(new Dimension(20,20));
        f.setVisible(true);
    }

    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.";

}
Avatar billede aitnemed Novice
30. august 2007 - 13:28 #8
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:

http://www.esnips.com/doc/e2c6e9fc-482e-445a-9e18-894aed7c8b49/Ønsket-oversigt

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:

http://www.esnips.com/doc/856194d8-f71f-405e-8310-dfa5bd85ba49/Original-listeoversigt-der-ønskes-ændret

Håber at det letter forståelsen

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.
Avatar billede snoop_one Nybegynder
31. august 2007 - 12:37 #9
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.
Avatar billede snoop_one Nybegynder
31. august 2007 - 12:49 #10
import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class Jscrollpane {

    public static void main(String[] args) {
        JFrame f = new JFrame("Text Area Examples");
        JPanel lowerPanel = new JPanel();
       
        f.getContentPane().add(new JScrollPane(lowerPanel,JScrollPane.VERTICAL_SCROLLBAR_NEVER,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS));
       
        lowerPanel.add(new JScrollPane(new JTextArea(content, 1, 6),JScrollPane.VERTICAL_SCROLLBAR_NEVER,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS));
        JTextArea ta = new JTextArea(content, 1, 6);
        lowerPanel.add(new JScrollPane(ta,JScrollPane.VERTICAL_SCROLLBAR_NEVER,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS));

        ta = new JTextArea(content, 1, 6);
        lowerPanel.add(new JScrollPane(ta,JScrollPane.VERTICAL_SCROLLBAR_NEVER,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS));

       
        f.setPreferredSize(new Dimension(10,20));
        f.pack();
        f.setVisible(true);
    }

    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.";

}
Avatar billede aitnemed Novice
01. september 2007 - 18:39 #11
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

"forEachContactPanel.add(makeInfoPanel(entireListOfContacts.get(counter)));"

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.
Avatar billede snoop_one Nybegynder
03. september 2007 - 15:40 #12
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.
Avatar billede aitnemed Novice
12. september 2007 - 09:14 #13
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?
Avatar billede snoop_one Nybegynder
20. september 2007 - 09:51 #14
ja du kan sætte din layout manager til null og selv styre layout'et
Avatar billede snoop_one Nybegynder
20. september 2007 - 09:52 #15
Avatar billede aitnemed Novice
10. april 2011 - 18:03 #16
Wow, kan se at jeg aldrig fik lukket denne.

Snoop_one smider du ikke lige et svar - det har du fortjent... Bedre sent end aldrig ;o)
Avatar billede aitnemed Novice
15. maj 2011 - 12:34 #17
Der lukkes
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester