# Funktion für PopUp Menü



## Guest (21. Mrz 2007)

hallo,
Ich bin dabei meinen QT zu kürzen und wollte mir daher eine Math. Funktion für meine PopUp menüs schreiben die ich dann auf jeden button einfügen kann.

habe mir das ca so gedacht 


```
public String popup(){
       int number = 0;
       String str = "pop";
       String nr = number+"";
       String[] Optionen = {"Ja","Nein"};
       int Auswahl = JOptionPane.showOptionDialog(cmdEiner,"Keine passenden Würfel. Feld Streichen?","Feld Streichen",
                     JOptionPane.YES_NO_OPTION,
                     JOptionPane.QUESTION_MESSAGE,null,
                     Optionen,Optionen[0]);
       if(Auswahl==JOptionPane.YES_OPTION){
        for(int i =0;i<13;i++){
           if(lblWerte[i].getText()==cmdWuerfel[i].getText()){  <---- da liegt das problem
            cmdAuswahl[i].setVisible(false);
            lblWerte[i].setVisible(true);
            lblBezeichnungen[i].setVisible(true);
            }

         }
        wuerfe = 0;
        blenden++;
        rueck();
        blenden();

       }
```

ich will an markierter stelle eine rechnung durchfürhen die das hier verallgemeinert und für alle Buttons nutzbar macht - 13 an der Zahl.


```
String[] Optionen = {"Ja","Nein"};
       int Auswahl = JOptionPane.showOptionDialog(cmdEiner,"Keine passenden Würfel.Einer Streichen?","Feld Streichen",
                     JOptionPane.YES_NO_OPTION,
                     JOptionPane.QUESTION_MESSAGE,null,
                     Optionen,Optionen[0]);
       if(Auswahl==JOptionPane.YES_OPTION){
        lblEiner.setVisible(true) ;
        cmdEiner.setVisible(false);
        lblEinerW.setVisible(true);
        wuerfe = 0;
        blenden++;
        rueck();
        blenden();

       }
```


zur info meine arrays:
lblWerte_  - Label mit den Werten -> werden aus cmdWuerfel // cmdSelected ausgelesen
lblBezeichnungen -> nur Text
cmdWuerfel 
cmdSelected_


----------



## Guest (21. Mrz 2007)

noch ein arrayvergessen 

cmdAuswahl_  - hier sind die 13 Buttons drinne_


----------



## The_S (21. Mrz 2007)

Irgendwie kann ich keine Frage erkennen ... ???:L


----------



## SlaterB (21. Mrz 2007)

allgemein: Strings nicht mit == vergleichen sondern mit .equals


----------



## Guest (21. Mrz 2007)

die frage ist wie ich das vereinfachen bewerkstelligen soll also den vergleich der arrays


----------



## The_S (21. Mrz 2007)

kA was du unter "vereinfachen" verstehst, aber Arrays kannst du miteinander über verschachtelte Schleifen vergleichen.


----------



## Guest (21. Mrz 2007)

hättest da ma n beispiel parat ?? bitte


----------



## thE_29 (21. Mrz 2007)

Dein Problem liegt daran das man Strings eben mit equals(anderer String) vergleicht und nicht mit ==

Wurde aber schon vor 2 Posts geschrieben! (du vergleichst ja schon in einer for schleife...)


----------



## Guest (21. Mrz 2007)

ja ich hab das ja schon geändert mit .equals


```
for(int i =0;i<13;i++){
           if(cmdAuswahl[i].getText().equals(cmdSelected[i].getText())){
            cmdAuswahl[i].setVisible(false);
            lblWerte[i].setVisible(true);
            lblBezeichnungen[i].setVisible(true);
            }

         }
```
compiliert wird es nur da tut sich nichts im programm ausser diese fehlermeldung
_
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 5
 at kniffel.popup(kniffel.java:833)
 at kniffel.cmdEinerActionPerformed(kniffel.java:881)
 at kniffel$5.actionPerformed(kniffel.java:262)
 at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
 at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
 at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
 at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
 at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
 at java.awt.Component.processMouseEvent(Component.java:6038)
 at javax.swing.JComponent.processMouseEvent(JComponent.java:3260)
 at java.awt.Component.processEvent(Component.java:5803)
 at java.awt.Container.processEvent(Container.java:2058)
 at java.awt.Component.dispatchEventImpl(Component.java:4410)
 at java.awt.Container.dispatchEventImpl(Container.java:2116)
 at java.awt.Component.dispatchEvent(Component.java:4240)
 at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
 at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
 at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
 at java.awt.Container.dispatchEventImpl(Container.java:2102)
 at java.awt.Window.dispatchEventImpl(Window.java:2429)
 at java.awt.Component.dispatchEvent(Component.java:4240)
 at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
 at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
 at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
 at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
 at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
 at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
 at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)_


----------



## The_S (21. Mrz 2007)

Das heißt, dass du auf ein Element eines Arrays zugreifen möchtest (5), dass nicht existiert. Dein Array hat also vermutlich nur 5 Elemente (0, 1, 2, 3, 4).


----------



## Guest (21. Mrz 2007)

```
for(int i =0;i<13;i++){
           if(lblWerte[i].getText() =="0"){     
            cmdAuswahl[i].setVisible(false);
            lblWerte[i].setVisible(true);
            lblBezeichnungen[i].setVisible(true);
            }

         }
```
hab das nun so geändert - allerdings werden jetzt alle anderen btns ausgeblendet und der der eingentlich weg soll bleib da


----------



## thE_29 (21. Mrz 2007)

Wieso vergleichst du schon wieder mit ==

Kapierst du das nicht, dass das mit Strings NICHT GEHT!!

Und wie kommst du eigentlich auf i<13?! Hast du dein Array mit 13 angelegt und sagt dir die Exception da oben überhaupt was?!


----------



## Guest (21. Mrz 2007)

wenn ich das mit equals(0) mache geht gar nichts mehr
array mit 13 feldern sind die cmd auswahl drin
und ja ich hab das array mit 5 rausgenommen weil nich passte


----------



## AlArenal (21. Mrz 2007)

Vielleicht solltest du mal *nachlesen* wie man #equals richtig benutzt. Dieses Forum bietet eine Suchfunktion, es gibt INternet-Suchmaschinen, es gibt Bücher, ....


----------



## Guest (21. Mrz 2007)

hab ich
es werden trotzdem alle btns ausgeblendet un nicht nur der eine der soll


----------



## thE_29 (21. Mrz 2007)

du musst ja auch equals("0") sagen!

Du vergleichst Strings! Wenn du equals(0) machst, nimmt er dir eine Zahl und keinen String!

Ich würde dir das Onlinebuch "java ist auch eine Insel" empfehlen oder einen Blick in die Tutorials Section und in die FAQ!


----------



## Guest (21. Mrz 2007)

hab ich alles schon gemacht - ohne erfolg.

habe das so gelöst

```
for(int i=0;i<13;i++)
         {

           if(lblWerte[i].getText().equals("0"))
           {
             if(cmdAuswahl[i].getText().equals(lblBezeichnungen[i].getText()))     // Auswahl eingrenzen
             {
               System.out.println("hallo") ;
               cmdAuswahl[i].setVisible(false);
               lblBezeichnungen[i].setVisible(true);
              }
            }
          }
```

nur das eingrenzen des arrays geht nicht - alle buttons von cmdauswahl werden invisible nicht nur der eine der soll.
wie kann ich das genauer eingrenzen?


----------



## thE_29 (21. Mrz 2007)

Wird den hallo auch so oft ausgeben?!

Und solange ich net mal weiß was du wo eingibst, und wie das ganze aussieht (was isn ein QT überhaupt?!) kann ich dir net weiterhelfen..


----------



## Guest (21. Mrz 2007)

hallo wird 13x ausgegeben - also einmal das array durch
QT - Quell Text
ich gebe ja nichts ein - nur der button text und der label text sind gleich.
auf buttondruck soll dieser invisible werden und das gleichnamige label visible.

bsp :

button1 gedrückt => button1 invisible , label1 visible
dazu will ich ja ne funktion haben


----------



## thE_29 (21. Mrz 2007)

Und du fragst in einer for Schleife ab ob der Text gleich ist und setzt das dann!

Was hat das mit nem Klick zum tun?


----------



## Guest (21. Mrz 2007)

die for schleife is fürs array da - muss ja vorher sein.
mit dem klick hat das nichts zu tun. klick heisst für mich btn ausgewählt - denk dir also ausgewählt statt klick


----------



## Guest (21. Mrz 2007)

ausserdem wie kommst auf klick ?


----------



## thE_29 (21. Mrz 2007)

auf buttondruck soll dieser invisible werden und das gleichnamige label visible. 


Was isn ein Buttondruck sonst?!


----------



## Guest (22. Mrz 2007)

hast ja recht.
hast du da eine idee wie ich das lösen könnte - wäre sehr hilfreich


----------



## thE_29 (22. Mrz 2007)

Das geht mit einem MouseListener und wie gesagt, schau dir das Buch java ist auch eine Insel, wenn du noch nicht soviel weißt!


----------



## Guest (22. Mrz 2007)

einen MouseListener wollte ich eigentlich nicht einfügen. ich kann das ja auch über ein action event steuern indem ich jedem button die funktion hinzufüge.


----------



## thE_29 (22. Mrz 2007)

Du kannst auch einen ActionListener dranhängen! Das geht natürlich auch, dann würde er auch auf die Leertaste reagieren!


----------



## Guest (22. Mrz 2007)

auf welche tasten der action listener reagiert is für mich eigentlich belanglos.
viel wichtiger ist ja die funktion. dabei habe ich ja das problem das nicht ein button ausgeblendet wird sondern alle 13.
das soll ja nicht sein


----------



## thE_29 (22. Mrz 2007)

Naja, dann zeig mal her wie du den ActionListener einbindest und wie und wo du darauf reagierst!


----------



## Guest (22. Mrz 2007)

Funktion :

```
public String popup(){
       String str = "pop";
       String[] Optionen = {"Ja","Nein"};
       int Auswahl = JOptionPane.showOptionDialog(cmdEiner,"Keine passenden Würfel. Feld Streichen?","Feld Streichen",
                     JOptionPane.YES_NO_OPTION,
                     JOptionPane.QUESTION_MESSAGE,null,
                     Optionen,Optionen[0]);
        if(Auswahl==JOptionPane.YES_OPTION)
        {
          for(int i=0;i<13;i++)
          {
            if(lblWerte[i].getText().equals("0"))
            {
              if(cmdAuswahl[i].getText().equals(lblBezeichnungen[i].getText()))     // Was soll dahin ??  Auswahl eingrenzen
              {
                System.out.println("hallo") ;
                cmdAuswahl[i].setVisible(false);
                lblBezeichnungen[i].setVisible(true);
               }
             }
           }
          wuerfe = 0;
          blenden++;
          rueck();
          blenden();

         }
        else if(Auswahl==JOptionPane.NO_OPTION){
          for(int i =0;i<13;i++){
          //lblWerte[i].setVisible(true);
          //lblBezeichnungen[i].setVisible(false);
          }
          blenden--;
         }

      return "pop";
      }
```

ActionListener:


```
public void cmdEinerActionPerformed(ActionEvent evt) {

    blenden++;

    lblEiner.setText(howmany(1)+"");
    int x = Integer.parseInt(lblEiner.getText());
    if(x>0){
      lblEinerW.setVisible(true);
      cmdEiner.setVisible(false);
      wuerfe = 0;
      lblEiner.setText(howmany(1)+"");
      lblEiner.setVisible(true);
      cmdEiner.setVisible(false);
      cmdWuerfeln.setVisible(true);
      rueck();
      blenden();

     }
     else if(x==0){
        popup();                <---------------------- Da is referenz zu funktion
        }
     
      if(oben()>0){
       lblPLinks.setText(oben()+"");
      }
      if(bonus()>=63){
        lblBonusBez.setVisible(true);
        lblBonus.setVisible(true);
      }
     if(ende()>0){
       lblPGesamt.setText(ende()+"");
      }
    blenden();
    }
```


----------



## thE_29 (22. Mrz 2007)

Rufe die Methode popup mit 

popup(evt.getSource()) auf und setze dann die übergebene Komponente (musst du vielleicht auf JButton casten) dann auf enabled oder disabled!


----------



## Gast (22. Mrz 2007)

hilft das weiter ??


----------



## Gast (22. Mrz 2007)

ah sry lezten beitrag übersehen - vergiss meinen lezten


----------

