Getter Problematik mit ItemListener

mwb

Mitglied
Hallo zusammen,

ich arbeite mich aktuell in die Basics von Java ein und erstelle in diesem Zusammenhang einen Taschenrechner. Der Rechner tut was er soll, er wirft Ergebnisse aus. Nun mehr möchte ich den Rechner (auch im Hinblick auf neue Funktionalitäten) erweitern.

Ich verwende ein verschachteltes Layout:
  • Für die Gesamtdarstellung wird ein BorderLayout genutzt von denen bisher North und Center genutzt werden
  • Im North Bereich nutze ich ein BoxLayout um einmal die Ausgaben anzuzeigen und um Bedienelemente anzuzeigen
  • Der Center Bereich nutzt ein GridLayout für die Darstellung der jeweiligen Tasten
Vor dem eigentlichen Code mein aktuelles Problem:

Der North Bereich enthält eine Checkbox, welche dazu genutzt werden soll, erweiterte Tasten anzeigen zu lassen. Die Default Einstellung enthält die grundlegenden Tasten von 0-9 sowie die Grundrechenarten, die Erweiterten Einstellungen sollen ein größeres Tastenfeld mit Funktionalitäten wie bspw. Wurzel, Potenz, etc. darstellen.
Der Ablauf soll nun wiefolgt realisiert werden: Sobald die Checkbox angeklickt wird soll dieses über einen ItemListener abgefangen und die boolsche Variable buttonsetdefault auf einen neuen Wert (false) gesetzt werden. Daraufhin soll das Tastenfeld mittels einer If-Schleife ausgetauscht werden. Der Initialwert von buttonsetdefault beträgt true, damit das einfache Tastenfeld erscheint.

Nachfolgend der relevante Code:

Java:
package Calculator;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class FrameConstructor extends JFrame{
  
    JButton display, button, test1, test2;
    JPanel pnlNorth, pnlCenter;
    JCheckBox cbxerw;
    double result, fixed10;
    Double input2, store;
    boolean start;
    public boolean buttonsetdefault;
    String lastCommand, recall, pm, pm3;
    Float pm2;
  
    //Nachfolgende Methode erzeugt das JFrame
  
    public FrameConstructor(){
      
        setVisible(true);
        setTitle("Calculator advanced");
        createUserInterface();
        add(pnlNorth, BorderLayout.NORTH);
        add(pnlCenter, BorderLayout.CENTER);
        pack();
      
    }
  
    void createUserInterface(){
      
        //North Content
                pnlNorth=new JPanel();
                pnlNorth.setLayout(new BoxLayout(pnlNorth, BoxLayout.Y_AXIS));
              
                display=new JButton("0");
                display.setEnabled(false);
              

              
                test1=new JButton("Ich bin Button 1");
                test2=new JButton("Ich bin Button 2");
                cbxerw=new JCheckBox("Erweiterte Operationen anzeigen");
                cbxerw.addItemListener(new CbxerwListener());
                add(cbxerw);
              
                pnlNorth.add(display);
                pnlNorth.add(test1);
                pnlNorth.add(test2);
                pnlNorth.add(cbxerw);
              
              
                //Initializing pnlCenter Variables
                result=0;
                lastCommand="=";
                start=true;
                fixed10=10;
                buttonsetdefault=true;
                System.out.println("Initialer Wert für Buttonsetdefault: " +buttonsetdefault);
              
                pnlCenter=new JPanel();
                if(buttonsetdefault==true){
              
                //Center Content
                pnlCenter.setLayout(new GridLayout(4,4));
              

                //Adding Buttons:Default button set
                addButton("7", insert);
                addButton("8", insert);
                addButton("9", insert);
                addButton("/", command);
              
                addButton("4", insert);
                addButton("5", insert);
                addButton("6", insert);
                addButton("*", command);
              
                addButton("1", insert);
                addButton("2", insert);
                addButton("3", insert);
                addButton("-", command);
              
                addButton("0", insert);
                addButton(".", insert);
                addButton("=", command);
                addButton("+", command);
                }else{
                    pnlCenter.setLayout(new GridLayout(7,5));
                      addButton("del", handling);
                         addButton("sto", handling);
                         addButton("rcl", handling);
                         addButton("+/-", handling);
                       
                         addButton("7", insert);
                      addButton("8", insert);
                      addButton("9", insert);
                      addButton("/", command);
               
                      addButton("4", insert);
                      addButton("5", insert);
                      addButton("6", insert);
                      addButton("*", command);
               
                      addButton("1", insert);
                      addButton("2", insert);
                      addButton("3", insert);
                      addButton("-", command);
               
                      addButton("0", insert);
                      addButton(".", insert);
                      addButton("=", command);
                      addButton("+", command);
                    
                      addButton("e^x", command2);
                      addButton("sqrt", command2);
                      addButton("cbrt", command2);
                      addButton("10^x", command2);
                    
                      addButton("pow", command);
                }

    }

                /*
                 * Implementing ItemListener for CheckBox interaction
                 */
              
                private class CbxerwListener implements ItemListener{
                    public void itemStateChanged(ItemEvent event){
                    if (cbxerw.isSelected()) {
                            buttonsetdefault=false;
                        } else {
                            buttonsetdefault=true;
                        }
                    //System.out.println("Buttonsetdefault am Ende der If-Schleife: " + buttonsetdefault);
                    }

                }

Die Erstellung des Fensters erfolgt mittels nachfolgender Klasse:

Java:
package Calculator;

import javax.swing.JFrame;

public class CalculatorAdvanced {

    public static void main(String[] args) {
        FrameConstructor frame=new FrameConstructor();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Mein Problem besteht darin, dass ich den Wert von buttonsetdefault aus dem ItemListener nicht abfangen kann. Ich habe versucht mit einem Getter zu arbeiten, das dürfte allerdings aufgrund der void Deklaration im ItemListener nicht funktionieren (korregiert mich, wenn ich falsch liege).

Daher meine Frage: Wie kann ich die Werte abgreifen und dann der If-Schleife für die Erzeugung der Buttons zuleiten? Aktuell stehe ich da ein wenig auf dem Schlauch.

Über Hinweise bin ich dankbar.
 
Zuletzt bearbeitet:

keram

Aktives Mitglied
Verstehe nicht ganz was deine ItemListener zurück geben soll.
In meinen Augen setzt er nur deinen Wert auf true/false. Müsstest du die nicht Methode für deine Buttons erneut aufrufen?
Könnte mich auch irren, bin silber erst neu dabei ;)
 

mwb

Mitglied
Das siehst du richtig, sie werden nur auf true bzw. false gesetzt. Genau das soll der ItemListener tun. Allerdings besteht das Problem, dass ich dieses true/false nicht aus der Schleife des ItemListeners an die If-Schleife geben kann, so dass diese stets mit dem Initialwert arbeitet.

Die Buttons können einfach ignoriert werden, die habe ich nur Testweise dort positioniert und sie werden wieder verschwinden.
 

Henne079

Aktives Mitglied
Du benötigst eine Methode, die die alten Buttons löscht und die nun benötigten hinzufügt. Diese Methode musst du in deinem Listener aufrufen. Dadurch wird bei jeder Änderung das Feld neu generiert.
 

keram

Aktives Mitglied
Genau das ist es was Henne meinte, du hast so zusagen einen Schalter der hin und her klickt ohne dabei ans Stromnetz angeschloßen zu sein. Erzeuge eine neue Methode und setzte sie unter deinen "Schalter".
Nur weil du Variablen änderst heißt es nicht das dein Programm zuhört :D
 

mwb

Mitglied
Hi ihr beiden,

vielen Dank für euern Input. Ich überlege mir mal, wie ich das angehen kann. Was mir noch nicht gänzlich klar ist, wie ich dann das Layout steuere, aber ich denke mal ein wenig drüber nach.
 

keram

Aktives Mitglied
Du musst das Layout neu initialisieren, sprich du kannst nicht deine GUI aufbauen, Änderungen an Form und Farbe der Buttons vornehmen und dann darauf hoffen das dein Programm es mitbekommt. Ich habe meinen Frame einfach über
Java:
frmRechner.setVisible( true );
neu angesprochen, meines Wissens nach wird der Layoutmanager dadurch neu aufgerufen.
 

mwb

Mitglied
@Henne079

Danke für dein Angebot, irgendwie mag mir grade diese Methode nicht gelingen. Aber ich möchte morgen Vormittag mir das nochmal in Ruhe anschauen, es kann ja nicht angehen, dass ich bei so etwas wie der Zuweisung eines Variablenwertes scheitere. Manchmal fällt mir eine Lösung bei den komischsten Tätigkeiten ein ^^.
Falls ich doch Unterstützung benötigen sollte, komme ich aber gerne nochmal auf dich zu.
 

mwb

Mitglied
@Henne079

Ich möchte auf dein Angebot zurück kommen, da ich Probleme habe, die neue Methode richtig zum Laufen zu kriegen. Vor dem Code meine Grundgedanken zum Methoden Design:

  • Die Methode wird aus dem ItemListener der Checkbox heraus aufgerufen, wobei der ItemListener den Wert für die boolsche Variable buttonsetdefault übergibt
  • Die Methode wurde mit einer Parameterliste definiert, so dass ein boolscher Wert immer von Nöten ist
  • Die Unterscheidung ob ein Austauschen des Panels notwendig ist, erfolgt mittels if-Schleife innerhalb der Methode
  • Im Falle des erweiterten Buttonsets (buttonsetdefault==false) soll das in der Methode definierte Gridlayout im Center Panel erzeugt werden

Der Code der Methode:
Java:
//Implementing Switch pnlCenter for switching GridLayout
                   void switchpnlCenter(boolean x){
                        System.out.println("Der vom ItemListener übergebene Wert ist: " +x);
                        if(x==true){
                            System.out.println("Default Set wird beibehalten");
                        }else{
                            pnlCenter.setLayout(new GridLayout(7,5));
                              addButton("del", handling);
                                 addButton("sto", handling);
                                 addButton("rcl", handling);
                                 addButton("+/-", handling);
                                
                                 addButton("7", insert);
                              addButton("8", insert);
                              addButton("9", insert);
                              addButton("/", command);
                        
                              addButton("4", insert);
                              addButton("5", insert);
                              addButton("6", insert);
                              addButton("*", command);
                        
                              addButton("1", insert);
                              addButton("2", insert);
                              addButton("3", insert);
                              addButton("-", command);
                        
                              addButton("0", insert);
                              addButton(".", insert);
                              addButton("=", command);
                              addButton("+", command);
                             
                              addButton("e^x", command2);
                              addButton("sqrt", command2);
                              addButton("cbrt", command2);
                              addButton("10^x", command2);
                             
                              addButton("pow", command);
                             
                              repaint();
                        }
                   }

Der Code des ItemListeners:
Java:
                private class CbxerwListener implements ItemListener{
                    public void itemStateChanged(ItemEvent event){
                    if (cbxerw.isSelected()) {
                            buttonsetdefault=false;
                            switchpnlCenter(buttonsetdefault);
                        } else {
                            buttonsetdefault=true;
                            switchpnlCenter(buttonsetdefault);
                        }
                    }

                }

Der Code als Gesamtansicht:

Java:
public class FrameConstructorOne extends JFrame{

    JButton display, button, test1, test2;
    JPanel pnlNorth, pnlCenter;
    JCheckBox cbxerw;
    double result, fixed10;
    Double input2, store;
    boolean start;
    public boolean buttonsetdefault;
    String lastCommand, recall, pm, pm3;
    Float pm2;
   
    //Nachfolgende Methode erzeugt das JFrame
   
    public FrameConstructorOne(){
       
        setVisible(true);
        setTitle("Calculator advanced");
        createUserInterface();
        add(pnlNorth, BorderLayout.NORTH);
        add(pnlCenter, BorderLayout.CENTER);
        pack();
       
    }
   
    void createUserInterface(){
       
        //North Content
                pnlNorth=new JPanel();
                pnlNorth.setLayout(new BoxLayout(pnlNorth, BoxLayout.Y_AXIS));
               
                display=new JButton("0");
                display.setEnabled(false);
               

               
                test1=new JButton("Ich bin Button 1");
                test2=new JButton("Ich bin Button 2");
                cbxerw=new JCheckBox("Erweiterte Operationen anzeigen");
                cbxerw.addItemListener(new CbxerwListener());
                add(cbxerw);
               
                pnlNorth.add(display);
                pnlNorth.add(test1);
                pnlNorth.add(test2);
                pnlNorth.add(cbxerw);
               
               
                //Initializing pnlCenter Variables
                result=0;
                lastCommand="=";
                start=true;
                fixed10=10;
                buttonsetdefault=true;
                //System.out.println("Initialer Wert für Buttonsetdefault: " +buttonsetdefault);
               
                pnlCenter=new JPanel();
                if(buttonsetdefault==true){
               
                //Center Content
                pnlCenter.setLayout(new GridLayout(4,4));
               

                //Adding Buttons:Default button set
                addButton("7", insert);
                addButton("8", insert);
                addButton("9", insert);
                addButton("/", command);
               
                addButton("4", insert);
                addButton("5", insert);
                addButton("6", insert);
                addButton("*", command);
               
                addButton("1", insert);
                addButton("2", insert);
                addButton("3", insert);
                addButton("-", command);
               
                addButton("0", insert);
                addButton(".", insert);
                addButton("=", command);
                addButton("+", command);
                }else{
                    pnlCenter.setLayout(new GridLayout(7,5));
                      addButton("del", handling);
                         addButton("sto", handling);
                         addButton("rcl", handling);
                         addButton("+/-", handling);
                        
                         addButton("7", insert);
                      addButton("8", insert);
                      addButton("9", insert);
                      addButton("/", command);
                
                      addButton("4", insert);
                      addButton("5", insert);
                      addButton("6", insert);
                      addButton("*", command);
                
                      addButton("1", insert);
                      addButton("2", insert);
                      addButton("3", insert);
                      addButton("-", command);
                
                      addButton("0", insert);
                      addButton(".", insert);
                      addButton("=", command);
                      addButton("+", command);
                     
                      addButton("e^x", command2);
                      addButton("sqrt", command2);
                      addButton("cbrt", command2);
                      addButton("10^x", command2);
                     
                      addButton("pow", command);
                }

    }
               
                //Creating method for Button interaction, adding Buttons to plnCenter
                private void addButton(String label, ActionListener listener) {
                    button=new JButton(label);           
                    button.addActionListener(listener);           
                    pnlCenter.add(button);                           
                }
               
                //Adding ActionListeners for Button interaction
               
                ActionListener insert = new InsertAction();                                //Number interaction
                ActionListener command = new CommandAction();                            //Operand interaction
                ActionListener command2 = new CommandAction2();                            //Extended Operand interaction
                ActionListener handling = new HandlingAction();                            //Store, Recall, Delete Operations
               
                /*
                 * Implementing ItemListener for CheckBox interaction
                 */
               
                private class CbxerwListener implements ItemListener{
                    public void itemStateChanged(ItemEvent event){
                    if (cbxerw.isSelected()) {
                            buttonsetdefault=false;
                            switchpnlCenter(buttonsetdefault);
                        } else {
                            buttonsetdefault=true;
                            switchpnlCenter(buttonsetdefault);
                        }
                    }

                }
               
                /*
                 * Implementing ActionListeners for Button interaction
                 */
               
                //Implementing Insert Listener for number interaction
                private class InsertAction implements ActionListener{
                    public void actionPerformed(ActionEvent event){
                        String input=event.getActionCommand();
                        input2=Double.parseDouble(input);
                        if(start==true){
                            display.setText("");
                            start=false;
                        }
                        display.setText(display.getText() + input);                        //Sending corresponding number to display
                    }
                }
               
                /*
                 * Implementing Command Listener for operand interaction
                 */
                private class CommandAction implements ActionListener{
                    public void actionPerformed(ActionEvent event){
                        String command=event.getActionCommand();
                        if(start==true){                                                //Setting minus as first sign
                            if(command.equals ("-")){
                                display.setText(command);
                                start=false;
                            }else{                                                        //Setting operand value to lastCommand operator
                                lastCommand=command;
                            }
                        }else{
                            calculate(Double.parseDouble(display.getText()));            //Handing Operation over to Method calculate(double x)
                            start=true;
                        }
                    }
                }
               
                /*
                 * Implementing Command Listener for extended Operations
                 */
               
                private class CommandAction2 implements ActionListener{
                    public void actionPerformed(ActionEvent event){
                        String command2=event.getActionCommand();
                        calculate2(Double.parseDouble(display.getText()));
                    }
                }
               
                /*
                 * Implementing Handling Listener for store, delete, recall
                 */
               
                private class HandlingAction implements ActionListener{
                    public void actionPerformed(ActionEvent event){
                        String handling=event.getActionCommand();
                        if(handling.equals("sto")){
                            store=Double.parseDouble(display.getText());
                            display.setText("0");
                            start=true;
                        }else if(handling.equals("rcl")){
                            String recall=String.valueOf(store);
                            display.setText(display.getText() +recall);
                            start=false;
                        }else if(handling.equals("del")){
                            result=0;
                            start=true;
                            display.setText("");
                        }else if(handling.equals("pm")){
                            String pm=display.getText();
                            Float pm2=Float.valueOf(pm);
                            pm2 *= -1;
                            String pm3=String.valueOf(pm2);
                            display.setText(pm3);
                            result=Double.parseDouble(pm3);
                            start=false;
                        }
                    }
                }
               
                /*
                 * Implementing calculate Methods
                 */
               
                //Implementing command calculation
                public void calculate(double x){
                    if (lastCommand.equals("+")) result += x;
                    else if (lastCommand.equals("-")) result -= x;
                    else if (lastCommand.equals("*")) result *= x;
                    else if (lastCommand.equals("/")) result /= x;
                    else if (lastCommand.equals("=")) result = x;
                    else if(lastCommand.equals("pow")) result=Math.pow(result, x);
                    display.setText("" + result);
                }
               
                //Implementing command2 calculation
                   public void calculate2(double x)
                   {
                       if(command2.equals("e^x")) result=Math.exp(x);
                       if(command2.equals("sqrt")) result=Math.sqrt(x);
                       if(command2.equals("cbrt")) result=Math.cbrt(x);
                       else if(command2.equals("10^x")) result=Math.pow(fixed10, x);
                       display.setText("" + result);
                      
                   }
                  
                //Implementing Switch pnlCenter for switching GridLayout
                   void switchpnlCenter(boolean x){
                        System.out.println("Der vom ItemListener übergebene Wert ist: " +x);
                        if(x==true){
                            System.out.println("Default Set wird beibehalten");
                        }else{
                            pnlCenter.setLayout(new GridLayout(7,5));
                              addButton("del", handling);
                                 addButton("sto", handling);
                                 addButton("rcl", handling);
                                 addButton("+/-", handling);
                                
                                 addButton("7", insert);
                              addButton("8", insert);
                              addButton("9", insert);
                              addButton("/", command);
                        
                              addButton("4", insert);
                              addButton("5", insert);
                              addButton("6", insert);
                              addButton("*", command);
                        
                              addButton("1", insert);
                              addButton("2", insert);
                              addButton("3", insert);
                              addButton("-", command);
                        
                              addButton("0", insert);
                              addButton(".", insert);
                              addButton("=", command);
                              addButton("+", command);
                             
                              addButton("e^x", command2);
                              addButton("sqrt", command2);
                              addButton("cbrt", command2);
                              addButton("10^x", command2);
                             
                              addButton("pow", command);
                             
                              repaint();
                        }
                   }
}

Über das println in der Methode kann ich erkennen, dass der richtige boolsche Wert an die Methode übergeben wird. Allerdings tut sich am panel noch rein garnichts. Ich überlege, ob ich den ursprünglichen pnlCenter Inhalt (abgesehen von der noch vorhandenen if-Schleife) nicht noch löschen müsste, eigentlich hatte ich hierfür extra das repaint() angedacht.

Vielleicht kannst du mir noch einen Tipp geben, wo ich was falsch einbinde, bzw. was nicht genau stimmt. Ich würde mich freuen.
 

keram

Aktives Mitglied
Ich lehne mich mal ganz weit aus dem Fenster und versuche dabei nicht raus zu fallen.
Schreibe eine Methode die dir dein Panel komplett sauber macht und versuche danach mal deine Elemente hin zu fügen. Da deine boolean werte ankommen müsste dein ItemListener anscheinend ohne Probleme funktionieren.

Im Zweifelsfall einmal durch debugen und die Schritte logisch mitgehen :)
 

mwb

Mitglied
@ keram:

Ich schätze, ich werde nicht darum kommen, eine komplett neue Methode zu schreiben, die das Center Panel löscht und neu zeichnet, hier muss ich allerdings überlegen, wie ich dies anstelle (mir ist das mit dem löschen noch nicht ganz klar, keine Ahnung wie ich das realisieren soll). Die Boolean Werte kamen zwar vom ItemListener an die neue Methode, die Übergabe an meine createUserInterface war jedoch nicht ganz sauber, daher anschließend nochmal die aktuelle Code Version. Dennoch ändert es nichts am Ergebnis: Die If-Schleife scheint - trotz nun mehr korrekt übergebener boolean Werte - nicht zu funktionieren (ursprünglich wollte ich dies ja genau gewährleisten).

Code mit korrekter Übergabe der boolean Werte an die Methode createUserInterface:

Java:
package Calculator;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class FrameConstructorOne extends JFrame{

    JButton display, button, test1, test2;
    JPanel pnlNorth, pnlCenter;
    JCheckBox cbxerw;
    double result, fixed10;
    Double input2, store;
    boolean start;
    boolean buttonsetdefault=true;
    String lastCommand, recall, pm, pm3;
    Float pm2;
 
    //Nachfolgende Methode erzeugt das JFrame
 
    public FrameConstructorOne(){
     
        setVisible(true);
        setTitle("Calculator advanced");
        createUserInterface(buttonsetdefault);
        add(pnlNorth, BorderLayout.NORTH);
        add(pnlCenter, BorderLayout.CENTER);
        pack();
     
    }
 
    void createUserInterface(boolean buttonsetdefault){
     
        System.out.println("An das Userinterface übergebener Parameter: " +buttonsetdefault);
     
        //North Content
                pnlNorth=new JPanel();
                pnlNorth.setLayout(new BoxLayout(pnlNorth, BoxLayout.Y_AXIS));
             
                display=new JButton("0");
                display.setEnabled(false);
             

             
                test1=new JButton("Ich bin Button 1");
                test2=new JButton("Ich bin Button 2");
                cbxerw=new JCheckBox("Erweiterte Operationen anzeigen");
                cbxerw.addItemListener(new CbxerwListener());
                add(cbxerw);
             
                pnlNorth.add(display);
                pnlNorth.add(test1);
                pnlNorth.add(test2);
                pnlNorth.add(cbxerw);
             
             
                //Initializing pnlCenter Variables
                result=0;
                lastCommand="=";
                start=true;
                fixed10=10;
                //System.out.println("Initialer Wert für Buttonsetdefault: " +buttonsetdefault);
             
                pnlCenter=new JPanel();
                System.out.println("pnlCenter Wert für Variable Buttonsetdefault: " +buttonsetdefault);
                if(buttonsetdefault==true){
             
                //Center Content
                pnlCenter.setLayout(new GridLayout(4,4));
             

                //Adding Buttons:Default button set
                addButton("7", insert);
                addButton("8", insert);
                addButton("9", insert);
                addButton("/", command);
             
                addButton("4", insert);
                addButton("5", insert);
                addButton("6", insert);
                addButton("*", command);
             
                addButton("1", insert);
                addButton("2", insert);
                addButton("3", insert);
                addButton("-", command);
             
                addButton("0", insert);
                addButton(".", insert);
                addButton("=", command);
                addButton("+", command);
                }else{
                    pnlCenter.setLayout(new GridLayout(7,5));
                      addButton("del", handling);
                         addButton("sto", handling);
                         addButton("rcl", handling);
                         addButton("+/-", handling);
                      
                         addButton("7", insert);
                      addButton("8", insert);
                      addButton("9", insert);
                      addButton("/", command);
              
                      addButton("4", insert);
                      addButton("5", insert);
                      addButton("6", insert);
                      addButton("*", command);
              
                      addButton("1", insert);
                      addButton("2", insert);
                      addButton("3", insert);
                      addButton("-", command);
              
                      addButton("0", insert);
                      addButton(".", insert);
                      addButton("=", command);
                      addButton("+", command);
                   
                      addButton("e^x", command2);
                      addButton("sqrt", command2);
                      addButton("cbrt", command2);
                      addButton("10^x", command2);
                   
                      addButton("pow", command);
                   
                }

    }
             
                //Creating method for Button interaction, adding Buttons to plnCenter
                private void addButton(String label, ActionListener listener) {
                    button=new JButton(label);         
                    button.addActionListener(listener);         
                    pnlCenter.add(button);                         
                }
             
                //Adding ActionListeners for Button interaction
             
                ActionListener insert = new InsertAction();                                //Number interaction
                ActionListener command = new CommandAction();                            //Operand interaction
                ActionListener command2 = new CommandAction2();                            //Extended Operand interaction
                ActionListener handling = new HandlingAction();                            //Store, Recall, Delete Operations
             
                /*
                 * Implementing ItemListener for CheckBox interaction
                 */
             
                private class CbxerwListener implements ItemListener{
                    public void itemStateChanged(ItemEvent event){
                    if (cbxerw.isSelected()) {
                            buttonsetdefault=false;
                            switchpnlCenter(buttonsetdefault);
                        } else {
                            buttonsetdefault=true;
                            switchpnlCenter(buttonsetdefault);
                        }
                    }

                }
             
                /*
                 * Implementing ActionListeners for Button interaction
                 */
             
                //Implementing Insert Listener for number interaction
                private class InsertAction implements ActionListener{
                    public void actionPerformed(ActionEvent event){
                        String input=event.getActionCommand();
                        input2=Double.parseDouble(input);
                        if(start==true){
                            display.setText("");
                            start=false;
                        }
                        display.setText(display.getText() + input);                        //Sending corresponding number to display
                    }
                }
             
                /*
                 * Implementing Command Listener for operand interaction
                 */
                private class CommandAction implements ActionListener{
                    public void actionPerformed(ActionEvent event){
                        String command=event.getActionCommand();
                        if(start==true){                                                //Setting minus as first sign
                            if(command.equals ("-")){
                                display.setText(command);
                                start=false;
                            }else{                                                        //Setting operand value to lastCommand operator
                                lastCommand=command;
                            }
                        }else{
                            calculate(Double.parseDouble(display.getText()));            //Handing Operation over to Method calculate(double x)
                            start=true;
                        }
                    }
                }
             
                /*
                 * Implementing Command Listener for extended Operations
                 */
             
                private class CommandAction2 implements ActionListener{
                    public void actionPerformed(ActionEvent event){
                        String command2=event.getActionCommand();
                        calculate2(Double.parseDouble(display.getText()));
                    }
                }
             
                /*
                 * Implementing Handling Listener for store, delete, recall
                 */
             
                private class HandlingAction implements ActionListener{
                    public void actionPerformed(ActionEvent event){
                        String handling=event.getActionCommand();
                        if(handling.equals("sto")){
                            store=Double.parseDouble(display.getText());
                            display.setText("0");
                            start=true;
                        }else if(handling.equals("rcl")){
                            String recall=String.valueOf(store);
                            display.setText(display.getText() +recall);
                            start=false;
                        }else if(handling.equals("del")){
                            result=0;
                            start=true;
                            display.setText("");
                        }else if(handling.equals("pm")){
                            String pm=display.getText();
                            Float pm2=Float.valueOf(pm);
                            pm2 *= -1;
                            String pm3=String.valueOf(pm2);
                            display.setText(pm3);
                            result=Double.parseDouble(pm3);
                            start=false;
                        }
                    }
                }
             
                /*
                 * Implementing calculate Methods
                 */
             
                //Implementing command calculation
                public void calculate(double x){
                    if (lastCommand.equals("+")) result += x;
                    else if (lastCommand.equals("-")) result -= x;
                    else if (lastCommand.equals("*")) result *= x;
                    else if (lastCommand.equals("/")) result /= x;
                    else if (lastCommand.equals("=")) result = x;
                    else if(lastCommand.equals("pow")) result=Math.pow(result, x);
                    display.setText("" + result);
                }
             
                //Implementing command2 calculation
                   public void calculate2(double x)
                   {
                       if(command2.equals("e^x")) result=Math.exp(x);
                       if(command2.equals("sqrt")) result=Math.sqrt(x);
                       if(command2.equals("cbrt")) result=Math.cbrt(x);
                       else if(command2.equals("10^x")) result=Math.pow(fixed10, x);
                       display.setText("" + result);
                    
                   }
                
                //Implementing Switch pnlCenter for switching GridLayout
                   void switchpnlCenter(boolean x){
                        System.out.println("Der vom ItemListener übergebene Wert ist: " +x);
                        if(x==true){
                            System.out.println("Default Set wird beibehalten");
                        }else{
                            createUserInterface(buttonsetdefault);
                         
                           
                              repaint();
                        }
                   }
}

Zielsetzung lautet also:

  • Default Buttonset zum Start anzeigen
  • ItemListener einfügen, um boolsche Werte an die Methode zu übergeben (done)
  • Methode erstellen, welches das Center Panel löscht und dann neu aufbaut

Nun gut, da ich bei dem Wetter eh nicht wie geplant draußen sein kann, habe ich etwas Zeit um mir das zu durchdenken.

Unabhängig davon würde es mich nur mal interessieren, wieso grade in diesem Kontext die if-Schleife nicht funktioniert. Das diese ursprünglich das Defaultset mit dem kleinen GridLayout anzeigt ist ja einzusehen und erwünscht, da ich den boolwert entsprechend initialisiere. Nach Übergabe der Werte aus meinem ItemListener via Methode an createUserInterface hätte ich jedoch erwartet, dass die Schleife erneut durchlaufen wird, da nun mehr der false Wert korrekt übergeben wurde. Ich schätze, ich habe an der Stelle etwas übersehen. Aus Sicht des Lerneffekts wäre es jedoch mal gut das herauszufinden.
 
Zuletzt bearbeitet:

keram

Aktives Mitglied
Java:
 if(buttonsetdefault==true){
ist ein falscher Ausdruck. Bei boolean hast du den Vorteil das du sie einfach in die Bedingung der if schleife schreiben kannst ohne einen Operator ran zu hängen, sprich

Java:
 if(buttonsetdefault) {
reicht völlig aus.

und dein setVisible immer erst dann schreiben wenn auch alles aufgebaut ist :)

Eine neue Methode muss nicht unbedingt erstellt werden, es reicht auch aus wenn du das erstellen deiner GUI in eine Methode verschiebst und BEVOR du alles hinzufügst einfach alles zurück setzt, dadurch muss du deine Methode zum erzeugen der GUI nur noch einmal aufrufen und der Rest kommt von alleine :)
 

mwb

Mitglied
Hmmm, also wenn ich einen Boolwert in einer If-Schleife auswerte wäre bei deiner Schreibweise der erste Fall (If) der true und der zweite Fall (else) false? Habe ich das richtig verstanden?
 

keram

Aktives Mitglied
Stimmt genau

Java:
    boolean geschichte = true;
    if (geschichte) {
        //Wahre begebenheit
    } else {
        //Gelogen
    }

kannst also auch

Java:
    boolean geschichte = true;
    if (!geschichte) {
        //NICHT Wahre begebenheit
    } else {
        //NICHT Gelogen
    }
machen. Oder sogar

Java:
    boolean geschichte = true;
    boolean erzaehlung = true;
    if (geschichte && erzaehlung) {
        //Wahre begebenheit, wurde durch erzaehlung bestaetigt
    } else {
        //Gelogen
    }

und so weiter :)
 

mwb

Mitglied
Hallo zusammen,

nachdem ich die API nochmal eingehender studiert und ein wenig rumprobiert habe, konnte ich entsprechende Methoden erstellen, um das von mir gewünschte Ergebnis zu erhalten.

Java:
*
                    * Implementing Switching Methods for panel content
                    */
             
                    //Implementing Switch pnlCenter for switching GridLayout
                   void switchpnlCenter(boolean x){
                        if(x){
                            deletepnlCenterStandard();
                        }else{
                            deletepnlCenterEnhanced();
                 
                        }
                   }
               
                 //Implementing Method to delete pnlCenterEnhanced content
                   void deletepnlCenterEnhanced(){
                       pnlCenter.removeAll();
                       activateEnhancedButtonset();
                   }
              
                 //Implementing Method to delete pnlCenterStandard content
                   void deletepnlCenterStandard(){
                       pnlCenter.removeAll();
                       activateStandardButtonset();
                   }
              
                 //Implementing Method to draw enhanced buttonset
                   void activateEnhancedButtonset(){
                       pnlCenter.setLayout(new GridLayout(7,5));
                          addButton("del", handling);
                             addButton("sto", handling);
                             addButton("rcl", handling);
                             addButton("+/-", handling);
                          
                             addButton("7", insert);
                          addButton("8", insert);
                          addButton("9", insert);
                          addButton("/", command);
                  
                          addButton("4", insert);
                          addButton("5", insert);
                          addButton("6", insert);
                          addButton("*", command);
                  
                          addButton("1", insert);
                          addButton("2", insert);
                          addButton("3", insert);
                          addButton("-", command);
                  
                          addButton("0", insert);
                          addButton(".", insert);
                          addButton("=", command);
                          addButton("+", command);
                       
                          addButton("e^x", command2);
                          addButton("sqrt", command2);
                          addButton("cbrt", command2);
                          addButton("10^x", command2);
                       
                          addButton("pow", command);
                          pnlCenter.validate();
                          repaint();
                          pack();

                   }
                
                   //Implementing Method to draw standard buttonset
                     void activateStandardButtonset(){
                            pnlCenter.setLayout(new GridLayout(4,4));
                         
                            addButton("7", insert);
                            addButton("8", insert);
                            addButton("9", insert);
                            addButton("/", command);
                         
                            addButton("4", insert);
                            addButton("5", insert);
                            addButton("6", insert);
                            addButton("*", command);
                         
                            addButton("1", insert);
                            addButton("2", insert);
                            addButton("3", insert);
                            addButton("-", command);
                         
                            addButton("0", insert);
                            addButton(".", insert);
                            addButton("=", command);
                            addButton("+", command);
                         
                             pnlCenter.validate();
                             repaint();
                             pack();
                      
                     }


Damit kann ich nun mehr gewährleisten, dass das Buttonset nicht nur einmal getauscht wird, sondern stets, wenn die Checkbox betätigt wird.

Allerdings habe ich noch eine abschließende Frage: Ich versuche meinen Displaybutton nun auf die Größe meines Center Panels anzupassen. Hierzu versuche ich es mittels pnl.Center.getWidth(), allerdings erhalte ich hier einen Wert von 0 zurückgegeben, ein Fehler wird jedoch nicht ausgegeben. Welche Alternative kann ich anwenden, um meinen Displaybutton auf die Größe des größten Panels zu bringen? setSize verlangt ja sowohl Höhe als auch Länge, ich möchte jedoch nur über der länge arbeiten.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Getter/Setter - wie sieht ein Setter aus? Und wie nicht? Java Basics - Anfänger-Themen 34
Say Class scope und Instance scope und Getter nur selbstgeschrieben Methoden Java Basics - Anfänger-Themen 11
W Getter/Setter Java Basics - Anfänger-Themen 4
W Unterschiede bei Zugriff auf Objekt und Klassenvariablen über einen Getter? Java Basics - Anfänger-Themen 2
KogoroMori21 Objektvariable anderer Klasse übernehmen, Getter/Setter Java Basics - Anfänger-Themen 11
T Verständnisfrage Objekt Getter Setter Java Basics - Anfänger-Themen 102
KogoroMori21 Getter und Setter Java Basics - Anfänger-Themen 5
O Instanzattribut per Getter Methode zuweisbar, warum? Java Basics - Anfänger-Themen 8
P Klassenübergreifende Ausgabe mittels "getter" nicht möglich Java Basics - Anfänger-Themen 21
J Array über Getter erlangen Java Basics - Anfänger-Themen 34
S Klassen instanziieren und verwenden von Getter und Setter Java Basics - Anfänger-Themen 4
P Klasse hat keinen Zugriff auf getter/setter-Methoden eines Objektes Java Basics - Anfänger-Themen 9
V getter/setter Garage Java Basics - Anfänger-Themen 12
M Getter einer PriorityQueue Java Basics - Anfänger-Themen 1
KopaCoda Getter mehrfach aufrufen -> ist das guter code? Java Basics - Anfänger-Themen 3
V Getter Methode Java Basics - Anfänger-Themen 38
S getter, setter in abstrakter Klasse oder lieber Unterklassen Java Basics - Anfänger-Themen 4
topi Kapselung getter und setter Java Basics - Anfänger-Themen 5
D Setter/Getter für Instanzvariablen praktisch? Java Basics - Anfänger-Themen 19
S Getter/Setter - Variablenklasse ? Java Basics - Anfänger-Themen 5
S getter and setter Java Basics - Anfänger-Themen 12
L Getter und Setter Java Basics - Anfänger-Themen 2
T Extrahiertes Objekt durch Getter bekommen Java Basics - Anfänger-Themen 2
M Generics getter und setter Methoden Java Basics - Anfänger-Themen 4
D Kapselung final Variablen mit Getter? Java Basics - Anfänger-Themen 2
A getter Java Basics - Anfänger-Themen 3
E Methoden Objekte in Methode aufrufen ohne getter und setter? Java Basics - Anfänger-Themen 1
T Getter für Array Java Basics - Anfänger-Themen 4
J-Gallus Ein Getter bekommt eine anderen Type als er Return soll Java Basics - Anfänger-Themen 9
K Public Attribute oder getter - funktioniert leider beides hier nicht Java Basics - Anfänger-Themen 5
L Klassen - Getter & Setter Methoden Java Basics - Anfänger-Themen 2
D Erste Schritte Java - Setter und Getter Java Basics - Anfänger-Themen 1
Z Getter/Setter NullPointer Exception Java Basics - Anfänger-Themen 6
P getter Java Basics - Anfänger-Themen 1
K Klassen Setter/Getter Java Basics - Anfänger-Themen 3
F OOP Schleifen und Probleme mit Setter und Getter Java Basics - Anfänger-Themen 1
L Setter und Getter/Vererbung Java Basics - Anfänger-Themen 6
K Kapselung getter & setter Java Basics - Anfänger-Themen 11
S Array und Getter-Methode Java Basics - Anfänger-Themen 2
Avarion Getter von Super-Klasse funktioniert nicht Java Basics - Anfänger-Themen 10
J Frage zu Setter u. Getter Java Basics - Anfänger-Themen 7
T Variablen Getter-Setter vs Public Variable? Java Basics - Anfänger-Themen 5
Y Konstruktor - Setter/Getter Java Basics - Anfänger-Themen 3
N Klassen fragen zur getter und setter methode Java Basics - Anfänger-Themen 11
D Ab wann getter und setter Java Basics - Anfänger-Themen 2
J Variable per Getter holen - wie ? Java Basics - Anfänger-Themen 2
K getter & setter Java Basics - Anfänger-Themen 6
C getter/setter Problem anscheinend Java Basics - Anfänger-Themen 13
D Getter Mehtode Unsicher Java Basics - Anfänger-Themen 6
G Erste Schritte Getter und Setter Java Basics - Anfänger-Themen 12
B Getter,Setter - Konstruktor überflüssig? Java Basics - Anfänger-Themen 26
N Sprite Methode (Getter, Setter, Konstruktor) Java Basics - Anfänger-Themen 9
S getter/setter aufrufen Java Basics - Anfänger-Themen 9
B Java getter/setter funktioniert nicht! Java Basics - Anfänger-Themen 7
X OOP Getter/Setter überschreiben den Wert ihrer Variablen nicht Java Basics - Anfänger-Themen 4
T Erste Schritte Verständnisfrage: Getter und Setter Methoden Java Basics - Anfänger-Themen 3
M Problem mit getter, liefert nur alte Werte Java Basics - Anfänger-Themen 6
V public Variablen vs Getter + Setter Java Basics - Anfänger-Themen 4
F Getter und Setter Java Basics - Anfänger-Themen 4
lulas[]args getter/setter umstellung Java Basics - Anfänger-Themen 6
El_Lobo Methoden Zu viele Getter- und Settermethoden - geht das einfacher? Java Basics - Anfänger-Themen 3
G Generics kein Zugriff auf getter eines Objekts Java Basics - Anfänger-Themen 4
B Klassen Getter-Setter vor neuem Klassenaufruf - wie? Java Basics - Anfänger-Themen 20
M OOP Aufruf vieler Getter Methoden abkürzen? Java Basics - Anfänger-Themen 7
N OOP Getter, Setter und andere Probleme Java Basics - Anfänger-Themen 8
A OOP Getter und Setter Java Basics - Anfänger-Themen 18
MU5T4NG Getter und Setten bei GUI-Erstellung Java Basics - Anfänger-Themen 13
B Variablen keine Arrayübergabe für getter im Interface Java Basics - Anfänger-Themen 8
L Unterschied Konstruktor / Getter Setter Java Basics - Anfänger-Themen 13
L Setter und Getter für Arrays? Java Basics - Anfänger-Themen 4
N boolean bei Setter und getter methoden Java Basics - Anfänger-Themen 21
J int Wert mit getter holen und in String parsen Java Basics - Anfänger-Themen 5
O Universeller GETTER Java Basics - Anfänger-Themen 5
J Die Getter Methode Java Basics - Anfänger-Themen 6
J Getter und Setter auch intern benutzen - guter Stil? Java Basics - Anfänger-Themen 31
Houly Setter/Getter MEthoden testen Java Basics - Anfänger-Themen 4
P OOP Getter&Setter Methoden funktionieren nicht Java Basics - Anfänger-Themen 7
E [Erledigt] Schöner Code zur Reduktion von unzähligen Getter-Methoden Java Basics - Anfänger-Themen 2
H Setter-und-Getter-Konvention Java Basics - Anfänger-Themen 8
V Reflection API - getter und setter Java Basics - Anfänger-Themen 7
-horn- EINE setter/getter klasse aus mehreren klassen befüllen Java Basics - Anfänger-Themen 13
C Getter/Setter Java Basics - Anfänger-Themen 61
F 2 dimensionales Array getter Methode Java Basics - Anfänger-Themen 3
H Frage zu getter und setter Java Basics - Anfänger-Themen 5
S Unbenutzte/überflüssige Getter/Setter herausfinden? Java Basics - Anfänger-Themen 2
K Getter Java Basics - Anfänger-Themen 6
M getter/setter bei JTextField ? Java Basics - Anfänger-Themen 21
G warum Setter/Getter Java Basics - Anfänger-Themen 25
S In einer Liste auf getter und setter zugreifen Java Basics - Anfänger-Themen 6
S JTextField in anderer Classe mit getter Methode auslesen. Java Basics - Anfänger-Themen 2
M if oder verschiedene getter Java Basics - Anfänger-Themen 31
Luk10 Problematik großer Objekt-Erstellung / -Löschung Java Basics - Anfänger-Themen 2
D Scanner hasNext(Line)() Block Problematik... Java Basics - Anfänger-Themen 6
T Command bei ItemListener? Java Basics - Anfänger-Themen 3
MrSnake ItemListener mit NullPointerException Java Basics - Anfänger-Themen 3
D Java Eclipse cannot be cast to java.awt.event.ItemListener Java Basics - Anfänger-Themen 3
I JTextfield[] innerhalb eines Itemlistener aufrufen Java Basics - Anfänger-Themen 2
M JComboBox und ItemListener/ItemEvent Problem Java Basics - Anfänger-Themen 3
O Applet ItemListener Java Basics - Anfänger-Themen 6
M CBX und ItemListener Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben