Avatar billede saxtus Nybegynder
04. marts 2004 - 12:17 Der er 8 kommentarer og
1 løsning

ChangeListener og udskiftning af JPanel

Jeg er i gang med at lave et program hvor jeg har nogle problemer.

Jeg har en tabmenu som skal kunne styre hvilket JPanel der skal vises ved siden af.

her er min tabmenu

-----------------------------

    setLayout(new TableLayout(stoerrelse));

    Lytter lyt = new Lytter();
    tab = new JTabbedPane();
    tab.addTab("Salg  ", SalgsPanel.hentInstans());
    tab.addChangeListener(lyt);
    tab.setSelectedIndex(0);
    tab.addTab("Indkøb", IndkøbsPanel.hentInstans());
    tab.addTab("Lager ", LagerPanel.hentInstans());

    this.add( tab, " 0, 1, 1, 1");
  }

  private class Lytter implements ChangeListener{
    public void stateChanged(ChangeEvent e){
      if(tab.getSelectedIndex() == 0){
        Main.hentInstans().SkiftPanel(SælgVare.hentInstans());
        JOptionPane.showMessageDialog(null, "0");
      }
      else if(tab.getSelectedIndex() == 1){
        Main.hentInstans().SkiftPanel(SælgVare.hentInstans());
        JOptionPane.showMessageDialog(null, "1");
      }
      else{
        Main.hentInstans().SkiftPanel(SælgVare.hentInstans());
        JOptionPane.showMessageDialog(null, "2");
      }
    }
  }

den sender så videre til min main som ses herunder

  public void SkiftPanel(SælgVare panel){
    int antal = 0;
    antal = c.getComponentCount();

    for (int i = 0; i < antal; i++){
      if( c.getComponent(1) != Svandret ||
          c.getComponent(1) != vareBeskrivelse ||
          c.getComponent(1) != tabMenu){
          c.remove(this.getComponent(1));
          c.add(panel);
      }
      else{}
      }
  }

jeg har meget på fornemmelsen at det er SkiftPanel() der driller.

Er der en der kan hjlæpe mig så ville det være rigtigt dejligt
Avatar billede conrad Nybegynder
04. marts 2004 - 13:09 #1
Ved ikke om det er tiltænkt men du benytter aldrig tæller i, i din for løkke

for (int i = 0; i < antal; i++){
      if( c.getComponent(1) != Svandret ||
          c.getComponent(1) != vareBeskrivelse ||
          c.getComponent(1) != tabMenu){
          c.remove(this.getComponent(1));
          c.add(panel);
      }
Du har kodet 1 i stedet for i? Ellers er løkken overflødig
Avatar billede saxtus Nybegynder
04. marts 2004 - 13:18 #2
ups, nå det er blevet rettet, men det virker stadig ikke.

Den skriver bare Exception occured during event dispatching
Avatar billede conrad Nybegynder
04. marts 2004 - 13:32 #3
Hvad sker der i linien:
c.remove(this.getComponent(1)); ?

Skulle måske være c.remove(c.getComponent(i));
this referer til et Main object, hvad refererer c til?
Avatar billede saxtus Nybegynder
04. marts 2004 - 13:37 #4
c er min container.

har prøvet at ændre lidt frem og tilbage men uden held, så nu ser den sådan her ud

  public void SkiftPanel(SælgVare panel){
    int antal = 0;
    antal = c.getComponentCount();

    for (int i = 0; i < antal; i++){
      if( c.getComponent(i) != Svandret ||
          c.getComponent(i) != vareBeskrivelse ||
          c.getComponent(i) != tabMenu){
          c.remove(i);
          c.add(panel);
      }
      else{}
      }
  }
Avatar billede conrad Nybegynder
04. marts 2004 - 13:40 #5
Kan du ikke poste hele den fejlmeddelse som kommer?
Avatar billede saxtus Nybegynder
04. marts 2004 - 13:51 #6
AppAccelerator(tm) 1.2.010 for Java (JDK 1.2), x86 version.
Copyright (c) 1997-1999 Inprise Corporation. All Rights Reserved.
Exception occurred during event dispatching:
java.lang.IllegalArgumentException: No constraint for the component
        at layout.TableLayout.addLayoutComponent(Compiled Code)
        at java.awt.Container.addImpl(Compiled Code)
        at java.awt.Container.add(Compiled Code)
        at Kildekode.GUI.Main.SkiftPanel(Main.java:223)
        at Kildekode.GUI.TabMenu$Lytter.stateChanged(TabMenu.java:45)
        at javax.swing.JTabbedPane.fireStateChanged(Compiled Code)
        at javax.swing.JTabbedPane$ModelListener.stateChanged(Compiled Code)
        at javax.swing.DefaultSingleSelectionModel.fireStateChanged(Compiled Code)
        at javax.swing.DefaultSingleSelectionModel.setSelectedIndex(Compiled Code)
        at javax.swing.JTabbedPane.setSelectedIndex(Compiled Code)
        at javax.swing.plaf.basic.BasicTabbedPaneUI$MouseHandler.mousePressed(BasicTabbedPaneUI.java:1747)
        at java.awt.Component.processMouseEvent(Compiled Code)
        at java.awt.Component.processEvent(Compiled Code)
        at java.awt.Container.processEvent(Compiled Code)
        at java.awt.Component.dispatchEventImpl(Compiled Code)
        at java.awt.Container.dispatchEventImpl(Compiled Code)
        at java.awt.Component.dispatchEvent(Compiled Code)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Compiled Code)
        at java.awt.LightweightDispatcher.processMouseEvent(Compiled Code)
        at java.awt.LightweightDispatcher.dispatchEvent(Compiled Code)
        at java.awt.Container.dispatchEventImpl(Compiled Code)
        at java.awt.Window.dispatchEventImpl(Compiled Code)
        at java.awt.Component.dispatchEvent(Compiled Code)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:258)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:68)
Avatar billede conrad Nybegynder
04. marts 2004 - 14:10 #7
Jeg har aldrig arbejdet med TableLayout, men det virker som om du mangler noget information om hvor dit Sælgvare panel skal placeres.

Dit tabpane bliver added med : this.add( tab, " 0, 1, 1, 1");

Så mon ikke ogsp dit Sælgvare panel skal det, blot med andre koordinater

public void SkiftPanel(SælgVare panel){
    int antal = 0;
    antal = c.getComponentCount();

    for (int i = 0; i < antal; i++){
      if( c.getComponent(i) != Svandret ||
          c.getComponent(i) != vareBeskrivelse ||
          c.getComponent(i) != tabMenu){
          c.remove(c.getComponent(i));
          c.add(panel, "X1,....");//indsæt koordinater for panel
      }
      else{}
      }
  }
Avatar billede saxtus Nybegynder
08. marts 2004 - 09:34 #8
fik en af mine venner til at hjælpe mig, så resultatet kom til at se sådan her ud og det virker bare perfekt.

  public void SkiftPanel(JPanel panel){
    int comp = 0;

    while(c.getComponent(comp) == Svandret || c.getComponent(comp) == VareBeskrivelse.hentInstans() || c.getComponent(comp) == TabMenu.hentInstans()){
      comp++;
    }
    c.remove(c.getComponent(comp));
    c.add(panel, " 4, 1");
    repaint();
  }
Avatar billede saxtus Nybegynder
08. marts 2004 - 09:35 #9
Så jeg burde nok give ham lidt som tak - men mange tak for jeres hjælp
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