Toon posts:

[Java] probleem bij Cardlayout

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben voor school bezig met het maken van een webwinkel in JAVA . Ik weet dat er betere talen zijn om dit te doen maar de opdracht is nu eenmaal java.

Nu heb ik het volgende probleem ik maar gebruik van verschillende panels borderlayout.

Eigenlijk een top, nav en een main frame dus.

Nu heb ik het volgende probleem ik bouw bv het main panel op met gegevens uit de navigatie ,
nu wil ik echter dat iedere keert als ik een card laat showen dus CardLayout.show dat hij de card opnieuw opbouwt. Weet iemand hoe ik dit zou moeten doen bv via een remove of een rebuild.

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Begrijp ik het nu goed als ik zeg dat je een webwinkel moet maken, maar dat je er een Java client voor aan het maken bent?
Of is het een applet (bijna hetzelfde maar net anders)?

Interpreteer je de opdracht wel goed? Want ik zou dit eerder aanpakken door een tomcat installatie te doen en met JSP en Java aan de slag te gaan.

Verwijderd

Topicstarter
Wij moeten dus alle applets schrijven en deze vervolgens in html aanroepen zodat je dus een webwinkel hebt.

Maar daar zit hem dus ook het probleem de volledige webwinkel moet dus in de appletviewer kunnen draaien.

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Handig, zo'n opdracht waar je straks weinig mee kan. Maar goed, dat doet niets af aan de realiteit ervan. :)

Kun je misschien wat code posten en aangeven wat er fout gaat en wat je al geprobeerd hebt? Dat maakt het iets makkelijker om aanwijzingen te kunnen geven.

Verwijderd

Topicstarter
Goed daar komt dan een lapcode aan

code:
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
import java.awt.Panel;
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
import java.util.*;
import java.sql.*;
import sun.jdbc.odbc.*;


public class NavPanel extends Panel
{

  private CardLayout navCards;
  private Vector vectorbuttons = new Vector();
  private Vector vectorButtonsSub = new Vector();
  private String regHoofdKey, regSubKey;

  public NavPanel()
   {

    navCards= new CardLayout();
    setLayout (navCards);

    setBackground(Color.red);

    // hier wordt de Card Hoofdcategorieen gemaakt


        Panel hoofdCat = new Panel();
        hoofdCat.setLayout(null);
        hoofdCat.setSize(125,0);

            try
            {
                DatabaseCon opvraagNav = new DatabaseCon();
                String verbind = opvraagNav.connect();

                    if( verbind != null)
                    {
                        ResultSet resultaat=opvraagNav.getNav("Select * from TBLHoofdcat");

                         while(resultaat.next())
                          {

                            String cat = resultaat.getString("Hoofdcat");
                            vectorbuttons.addElement(new Button(cat));
                          }
                    }

                opvraagNav.close();


             }


             catch (SQLException se)
             {
                System.out.println(se.getMessage());
             }

             int y=10;

                for (int i=0;i<vectorbuttons.size();i++)
                {
                    Button button=(Button)vectorbuttons.get(i);
                    button.setBounds(10,y,100,30);
                    button.addActionListener(new KnopHandlerHoofdcat(this));
                    hoofdCat.add(button);
                    y=y+35;
                }

        // Kaarten worden in de stapel geplaatst
        add("hoofdCat", hoofdCat);

    }

    class KnopHandlerHoofdcat implements ActionListener
    {
        NavPanel np;

        public KnopHandlerHoofdcat(NavPanel np)
        {
            this.np = np;
        }


        public void actionPerformed (ActionEvent e)
        {


        navCards.show(np, "subCat");
        Button b = (Button) e.getSource();

        regHoofdKey =b.getLabel();

        // hier wordt de Card subcategorieen gemaakt


            Panel subCat = new Panel();
            subCat.setLayout(null);
            subCat.setSize(125,0);

            try
           {
               DatabaseCon opvraagNav = new DatabaseCon();
               String verbind = opvraagNav.connect();

                   if( verbind != null)
                   {
                     ResultSet resultaat=opvraagNav.getNav("SELECT DISTINCT TBL_Boek_Subcat.Subcat FROM (TBL_BOEK INNER JOIN TBL_BOEK_Auteur ON TBL_BOEK.Boek_ID = TBL_BOEK_Auteur.BOEK_ID)INNER JOIN TBL_Boek_Subcat ON TBL_BOEK.Boek_ID = TBL_Boek_Subcat.Boek_ID WHERE TBL_BOEK.Hoofdcat='" + regHoofdKey + "'");

                        while(resultaat.next())
                         {

                           String subcat = resultaat.getString("Subcat");
                           vectorButtonsSub.addElement(new Button(subcat));
                         }
                   }

                opvraagNav.close();
            }

            catch (SQLException se)
            {
               System.out.println(se.getMessage());
            }


            int y=10;       //hiermee wordt de variable Y erug op10 gezet

            for (int i=0;i<vectorButtonsSub.size();i++)
            {
                Button button=(Button)vectorButtonsSub.get(i);
                button.setBounds(10,y,100,30);
                button.addActionListener(new KnopHandlersubcat(np));

                subCat.add(button);
                y=y+35;
            }

            Button terug = new Button("Terug");
            terug.setBounds(10,y,100,30);
            terug.addActionListener(new KnopHandlerterug(np));
            subCat.add(terug);


            add("subCat", subCat);
            navCards.show(np, "subCat");

        }
      }


      // classe om terug te keren in vorige card
      class KnopHandlerterug implements ActionListener
      {
        NavPanel np;

        public KnopHandlerterug(NavPanel np)
        {
             this.np = np;
        }

        public void actionPerformed (ActionEvent e)
        {

          vectorButtonsSub.removeAllElements();
          navCards.show(np, "hoofdCat");
        }
      }


      class KnopHandlersubcat implements ActionListener
      {
        NavPanel np;

        public KnopHandlersubcat(NavPanel np)
        {
          this.np = np;
        }

        public void actionPerformed (ActionEvent e)
        {
          Button b = (Button) e.getSource();
          regSubKey =b.getLabel();
        }
      }

}


wat die nu dus zou moeten doen is op het moment dat ik panelsubcat aanroep wil ik graag dat ie dus eerst dit panel helemaal leegmaakt en dan opnieuw de objecten volgens resultaat nieuwe query erop plaats.

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Globaal beschreven moet je volgens mij het volgende doen:
- Uit je hoofdscherm de controls die wegmoeten dmv remove(<geef hier control mee>) weghalen
- Nieuwe controls toevoegen
- repaint()

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Waarom wil je dat eigenlijk :?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Topicstarter
Oke ik heb dus nu de button die ik wil plaatsen naar bover gehaald zodat die binnen de hele knophandler te gerbuiker is.

voor de add loop heb ik nu het volgende geprobeerd

subCat.remove(button);

maar dat is dus fout hij zegt nammelijk

Variable button might not been initialized at line 134 coumn 24

Oh ja en hier declareer ik nu de button

Panel subCat = new Panel();
subCat.setLayout(null);
subCat.setSize(125,0);

Button button;

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Die foutmelding zegt het al, je roept in een stuk code de button aan, terwijl het kan voorkomen dat hier nog geen waarde aan toegekend is.
Dit kan bijvoorbeeld gebeuren in het volgende fragment:
Java:
1
2
3
Object obj;

System.out.println(obj.toString());


Om dit te laten werken zal ik eerst een geldig object moeten toekennen aan obj.
Dat geldt dus ook voor jouw stukje code.

Maar voordat ik wij je hierin zinvul van hulp kan kunnen zijn zul je me ons toch iets meer achtergrond moeten geven in wat je probeert te bereiken.

edit:
Volgens mijn manager moet ik meer doen aan het wij-gevoel ;)

[ Voor 10% gewijzigd door bigbeng op 10-12-2004 18:21 ]


Verwijderd

Topicstarter
Ik zal proberen uit te leggen wat ik wil bereiken.

Nou de eerste card bevat verschillende buttons welke hij moet aanmaken leest hij vanuit de databank in. als je nu op een van die buttons klikt laat hij de 2de card. Hiebij houdt hij dus rekening met welke button je hebt ingedrukt. Nu leest die vantuit de databank de gegevens rekening houdend met de ingegeven waarde en hij maakt de 2de kaart aan. maar omdat ik me ook mis kan navigeren wil ook terug hiervoor heb ik dus een terug knop geplaats die dus card 1 weer laat zien.

Ook dit doet ie ook maar als ik nu op een andere knop druk laat hij vervolgens de oude buttons zien plus de nieuwe. Eerst dacht ik dat ik het wist waarom want ik maakte mijn vector niet leeg waarin ik de buttens opsloeg maar dat heb ik aangepast. Maar het lijkt er voor mij dus op dat ie de card niet opnieuw maakt maar uit zijn geheugen haalt. Daarom dat ik dus dacht als ik nu iedere keer als ik die card aanroep eerst alles eraf gooi en dan alles opnieuw plaats dan moet het wel lukken.

Misschien dat je nu duidelijk is wat ik eigenlijk wil bereiken

Verwijderd

Topicstarter
Nu heb ik er nog een probleem bij want ik dacht oh omdat ik nu even niet verder kon met dit.

Dacht ik begin alvast de eerste applets eens aan te roepen in de browser. maar nu voorzie ik nog veel meer moeilijkheden :-(. Maar ja moeilijkheden zijn mogelijkheden.

Maar ik krijg de volgende melding in het console als ik de pagina open,

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
java.security.AccessControlException: access denied (java.lang.RuntimePermission accessClassInPackage.sun.jdbc.odbc)
    at java.security.AccessControlContext.checkPermission(Unknown Source)
    at java.security.AccessController.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkPackageAccess(Unknown Source)
    at sun.applet.AppletSecurity.checkPackageAccess(Unknown Source)
    at sun.applet.AppletClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClassInternal(Unknown Source)
    at DatabaseCon.connect(DatabaseCon.java:13)
    at NavPanel.<init>(NavPanel.java:36)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at java.lang.Class.newInstance0(Unknown Source)
    at java.lang.Class.newInstance(Unknown Source)
    at sun.applet.AppletPanel.createApplet(Unknown Source)
    at sun.plugin.AppletViewer.createApplet(Unknown Source)
    at sun.applet.AppletPanel.runLoader(Unknown Source)
    at sun.applet.AppletPanel.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)


Extra info ik laat de pagina vanaf mijn Apache webserver met windows 2000 erop en de verbinding met de odbc is aangemaakt

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Je kunt dit veel eenvoudiger oplossen door gebruik te maken van een List. Dan hoef je je veel minder bezig te houden met het up-to-date houden van je GUI, omdat de contents van de List gewoon de te selecteren objecten worden. Als dat mag en/of kan, zou ik gebruik maken van Swing, waarin je een ListModel kunt maken. Als je een ListModel implementeert als layer tussen de gui en de database, ben je binnen no-time klaar.

Volgens mij denk je te veel in web-applicatie termen ("Ik klik daar, dan haal ik dat scherm op"), maar daar moet je bij Java Applets en applicaties een beetje vanaf stappen. 't Is wel belangrijk om het event model dan een beetje te doorgronden.

Zie ook: How to use Lists

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Topicstarter
Je hebt inderdaad gelijk dat ik redeneeer in de zin zoals je dat bij frames in html kunt verwachten. maar dit werkt hier niet aangezien ik mijn componenten opbouw in een init als ik het document bouw. Ik heb de tutorial van de list uitgeprint en ook eentje met uitleg over swings (Grafisch componenten volgens mij) gedownload.

dus maar even kijken of ik een betere manier vindt

Verwijderd

Topicstarter
ik ben weer een heel stuk verder gekomen,, werk nu inderdaad ook met een list en maak gebruik van removeAll en setmethode zodat ik alles kan aanpassen zoals ik wil.

Maar nu ben ik toch weer vast gelopen en misschien kunnen jullie me helpen

Ik heb het volgende probleem:
code:
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
68
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import sun.jdbc.odbc.*;
import java.util.*;


public class BoekenOverzicht extends Panel
{
  private Vector vectornavResultaat= new Vector();
  private java.awt.List lnavResultaat = new java.awt.List();
  private Label hoofdTekst;


  public BoekenOverzicht()
  {

    setLayout(null);
    setSize(850,0);
    setBackground(Color.lightGray);


    hoofdTekst = new Label ("We hebben de volgende boeken voor u kunnen vinden");
    hoofdTekst.setFont(new Font("Serif", Font.PLAIN,36));
    hoofdTekst.setBounds(75,10,775,50);
    add(hoofdTekst);

    lnavResultaat.setBounds(20,75,860,250);
    add(lnavResultaat);


  }

  public void setNavGegeven(Vector transport)
  {
    remove(lnavResultaat);
    vectornavResultaat.removeAllElements();
    this.vectornavResultaat=transport;


    for (int i=0;i<vectornavResultaat.size();i++)
    {
      lnavResultaat.add(vectornavResultaat.get(i).toString());
    }

    lnavResultaat.addMouseListener(new MuisHandler());
    add(lnavResultaat);

  }
  

  class MuisHandler extends MouseAdapter
  {
    public void mouseClicked(MouseEvent e)
    {
      if (!e.isAltDown() || !e.isMetaDown())
      {
        if(e.getClickCount()==2)
        {

       

        }

      }
    }
  }


Maar zoals je ziet is het de bedoeling dat als er in de list dubbel geklikt word dat ie een andere kaart gaat laten zien. nammelijk de card boekspec die in de classe Mainpanel staat.

code:
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
import java.awt.Panel;
import java.awt.*;
import java.applet.*;
import java.util.*;

public class MainPanel extends Panel
{

     private CardLayout mainCards;
     private BoekenOverzicht boekenoverzicht;
     private Vector tranport = new Vector();
     private GebruikersProfiel gebruikersgegeven;
     private Veiling veiling;
     private BoekSpec boekspec;


     public MainPanel()
     {

     mainCards= new CardLayout();
     setLayout (mainCards);

    // welkom kaart

    WelkomPanel welkom = new WelkomPanel();

    //  Zoeken uitgebreidKaart= new Zoeken();

    Zoeken zoeken= new Zoeken();

    gebruikersgegeven= new GebruikersProfiel();

    veiling = new Veiling();

    boekspec = new BoekSpec();

    boekenoverzicht = new BoekenOverzicht();

    add("welkom", welkom);
    add("zoeken", zoeken);
    add("boekenOverzicht", boekenoverzicht);
    add("gebruikersgegeven", gebruikersgegeven);
    add("veiling", veiling);
    add("boekspec", boekspec);


Iemand een idee hoe dit zou kunnen, de 3 panels maak ik in de eerste classe die ik heb gemaakt nammelijk webwinkel.
Pagina: 1