[JAVA] validate/revalidate/invalidate?

Pagina: 1
Acties:

  • NDF82
  • Registratie: Januari 2002
  • Laatst online: 13-08 17:12

NDF82

Doomed Space Marine

Topicstarter
Hi all,

Kheb een probleempje met een GUI die ik aan het maken ben. Het probleem is als volgt:
Ik wil een soort lijst maken zoals in MSN. De lijst is dan verdeeld in groepen en als je op een knop van een bepaalde groep drukt expand of collapsed de lijst. Ik heb nu het volgende:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
public class TestFrame extends JFrame {
    JScrollPane scrollPane = new JScrollPane();
    JPanel      backPanel  = new JPanel();

    public TestFrame() {
        initGUI();
    }

    private void initGUI() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(300, 400);
        getContentPane().setLayout(new BorderLayout());

        getContentPane().add(scrollPane, BorderLayout.CENTER);

        scrollPane.getViewport().add(new ExpandableList());
    }

    private class ExpandableList extends JPanel {
        JPanel  panel1  = new JPanel();
        JPanel  panel2  = new JPanel();
        JButton button1 = new JButton("b1");
        JButton button2 = new JButton("b2");
        JList   list1   = new JList(new String[] {"1", "2", "3"});

        public ExpandableList() {
            initGUI();
        }

        private void initGUI() {
            setLayout(new BorderLayout());
            panel1.setLayout(new BorderLayout());
            panel1.add(button1, BorderLayout.NORTH);

            panel2.setLayout(new BorderLayout());
            panel2.add(button2, BorderLayout.NORTH);
            panel2.add(list1, BorderLayout.CENTER);

            button1.addActionListener(new Action1());
            button2.addActionListener(new Action2());

            add(panel1, BorderLayout.CENTER);
        }

        private class Action1 implements ActionListener {
            public void actionPerformed(ActionEvent e) {
                ExpandableList.this.remove(panel1);
                ExpandableList.this.add(panel2, BorderLayout.CENTER);
                //ExpandableList.this.invalidate();
                //ExpandableList.this.panel2.validate();
                //ExpandableList.this.validate();
                ExpandableList.this.revalidate();
            }
        }

        private class Action2 implements ActionListener {
            public void actionPerformed(ActionEvent e) {
                ExpandableList.this.remove(panel2);
                ExpandableList.this.add(panel1, BorderLayout.CENTER);
                //ExpandableList.this.invalidate();
                //ExpandableList.this.panel1.validate();
                //ExpandableList.this.validate();
                ExpandableList.this.revalidate();
            }
        }
    }
}


Waarom geen CardLayout? Omdat CardLayout alle Components zo groot maakt als het grootse Component wat toegevoegd is aan de container... En dat wil ikniet ;)

Alles wordt goed getekend als de ScrollPane moet "scrollen". Is dit niet het geval (er is geen scrollbar), dan wordt er niet goed getekend.

Een paar plaatjes ter verduidelijking:
Hmmm, plaatje linken gaat niet van Geocities, dan maar zo:
http://www.geocities.com/ndf_82/init.png begin
http://www.geocities.com/ndf_82/klik1.png] 1e klik op knop
http://www.geocities.com/ndf_82/klik2.png] 2e klik op knop
http://www.geocities.com/ndf_82/resize.png] resizen van JFrame
http://www.geocities.com/ndf_82/klik3.png] 3e klik op knop
http://www.geocities.com/ndf_82/klik4.png] 4e klik op knop

en de source

Wie o wie kan mij helpen?

Pentium 233MHz MMX + Diamond Monster 3D 3DFX Voodoo II


  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

Ik kan de plaatjes niet zien helaas.

Overigens zou ik als ik een MSN Kloon zou programmeren, een eigen component programmeren en ook zelf bouwen ipv standaard buttons, labels en LayoutManagers te gebruiken.


Edit2: heb je al naar JTree gekeken? Die doet waarschijnlijk precies wat je wilt :)

[ Voor 89% gewijzigd door wasigh op 27-02-2003 17:24 ]


  • NDF82
  • Registratie: Januari 2002
  • Laatst online: 13-08 17:12

NDF82

Doomed Space Marine

Topicstarter
De plaatje kun je alleen zien als je de URL's kopieerd naar de addressbalk, ligt aan geocities denk ik.

Zelf een component programmeren, is dat niet enorm veel werk?
Naar JTree zal ik eens kijken.

Pentium 233MHz MMX + Diamond Monster 3D 3DFX Voodoo II


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

Alarmnummer

-= Tja =-

Ik zou idd ook even kijken naar de JTree. Je kan daar eenvoudig *kuch* zelf renderers aan toevoegen zodat het eruit ziet zoals jij wilt. Ik zal eens mijn BaseTree klaar maken. Daar kan je een stuk eenvoudiger trees mee maken dat dat waardeloos k*t ding van Swing.

Verwijderd

Ik zou gewoon zelf een layout manager schrijven.
Een andere optie is om een BoxLayout te gebruiken en je panels die je erin gooit te resizen.
Volgens mij schuift hij dan de rest op. Op je geresizede panel kan je dan of je header of alle content laten zien.

  • NDF82
  • Registratie: Januari 2002
  • Laatst online: 13-08 17:12

NDF82

Doomed Space Marine

Topicstarter
Alarmnummer schreef op 27 February 2003 @ 18:08:
Ik zou idd ook even kijken naar de JTree. Je kan daar eenvoudig *kuch* zelf renderers aan toevoegen zodat het eruit ziet zoals jij wilt. Ik zal eens mijn BaseTree klaar maken. Daar kan je een stuk eenvoudiger trees mee maken dat dat waardeloos k*t ding van Swing.
Ik heb ff naar de JTree gekeken en denk dat ik daar wel iets mee kan. Maar dat is iets voor na de vakantie ;)
Verwijderd schreef op 28 februari 2003 @ 11:37:
Ik zou gewoon zelf een layout manager schrijven.
Een andere optie is om een BoxLayout te gebruiken en je panels die je erin gooit te resizen.
Volgens mij schuift hij dan de rest op. Op je geresizede panel kan je dan of je header of alle content laten zien.
De BoxLayout had ik ook al geprobeerd, maar die was geen optie vanwege het volgende effect:
Afbeeldingslocatie: http://java.sun.com/j2se/1.4.1/docs/api/javax/swing/doc-files/BoxLayout-1.gif
Als bijv. C1 breder is als c2 wordt de breedte van c2 niet aangepast

Dus denk toch dat ik maar voor de tree met een eigen cellrenderer ga.
Allemaal bedankt voor de info.

Pentium 233MHz MMX + Diamond Monster 3D 3DFX Voodoo II

Pagina: 1