Anfängerfrage - Taschenrechner



  • Hi,

    ich bin anfänger in Sachen Java Programmierung und habe ein ActionListener Problem:

    Ich habe bis jetzt nur JButtons in meinem JFrame eingefügt, bis jetzt aber ohne Funktion. (eben ohne funktionierenden ActionListener)

    Mein Code sieht wie folgt aus: (Hauptklasse namens "apples")

    import java.awt.*; 
    import java.awt.event.*;
    
    import javax.swing.*;
    
    public class apples {
    
    	public static void main(String args[]){
    
    		gui window = new gui();
    		window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		window.setSize(800,600);
    		window.setVisible(true);
    		ActionListener insert = new EventHandeler();
    
    		//add numbers from 0 - 9
    		int[] numbers = new int[10];
    		JPanel buttonPane = new JPanel(new GridLayout(3,3,5,5));
    		buttonPane.setSize(300,300); 
    		buttonPane.setLocation(0, 0);
    		//for loop - buttons 0 - 9
    		for(int i=0; i<numbers.length; i++){
    			numbers[i] = i;
    			String x = String.valueOf(i);
    			JButton n = new JButton(x);
    			n.addActionListener(insert);
    			buttonPane.add(n);
    		}
    		// adding other buttons
    		JButton plus = new JButton("+");
    		buttonPane.add(plus);
    		JButton minus = new JButton("-");
    		buttonPane.add(minus);
    		JButton mult = new JButton("*");
    		buttonPane.add(mult);
    		JButton division = new JButton("/");
    		buttonPane.add(division);
    		JButton enter = new JButton("Calc");
    		buttonPane.add(enter);
    
    		window.add(buttonPane);
    
    		JLabel display = new JLabel("Calculating here");
    		display.setLayout(new BorderLayout());
    		window.add(display, BorderLayout.SOUTH);
    
    		}
    
    	}
    

    Die Ausgabe erfolgt auf einem JLabel, wo bis jetzt steht: "Calculating here".

    Jetzt ist es ja so, dass jeder Button ein "Label" als Aufschrift hat, den ich direkt umwandeln will (von String zu Integer zum Beispiel bei den Zahlen 0 bis 9).

    Wie bekomme ich nun aber über eine seperate "EventHandeler" - klasse, die einen ActionListener implementiert diese Button-Aufschrigt (getLabel)? Und wenn ich diesen habe, wie schreibe ich diese Information in mein JLabel display? (setText)?



  • Falls mein Hauptproblem nicht klar geworden ist:

    Ich habe Schwierigkeiten in der ActionPerformed() Methode (von ActionListener implementiert) auszudrücken, wie ich nun das Label meines Buttons bekommen soll.

    Ich kann in der neuen Methode das Objekt "n" (so ist er name des buttons) nicht ansprechen, da diese Variable nur lokal besteht... und wenn ich die Variable noch vor der Main Methode aufrufe (static...) dann kann ich die Methode getLabel() nicht nutzen (weil: wird von eclipse durchgestrichen und Fehlermeldung: "The method getLabel() from the Type AbstractButton is deprecated"



  • Guten Morgen ..

    Also ich hoffe ich habe dein Problem richtig verstanden .
    So sollte die actionPerfomed Funktion aussehen.
    Am einfachsten ist es, sie in der gleichen klasse zu erzeugen, wo du auch den rest der gui zusammenbaust. dann kannst du ganz einfach über einen membervariable auf dein Lable zugreifen.

    public void actionPerformed(ActionEvent e)
    

    Zu deienr zweiten frage :
    Du kannst jedem Button ein ActionCommand setzten ( mit setActionCommand() ) was du dann in der actionPerfomed abfragen kannst. Und das geht so :

    JButton button1 = new JButton("Neuer Button");
    button1.setActionCommand("SetValue1");
    ...
    public void actionPerformed(ActionEvent e){
    if (e.getActionCommand().equals("SetValue1")){	
    label.setText("1");
    }
    }
    

    Ist nicht groß getestet sonder nur mal schnell zusammengeschrieben.

    Ich hoffe das hilft dir ein bischen.



  • danke, habs soweit gelöst:

    Hatte eine "Private Inner Class" unter meiner main "apples" Klasse stehen.
    *Dies führte allerdings zu Schwierigkeiten, weil Variablen nicht erkannt wurden.

    Habe dann alles in einer seperaten Klasse umgeschrieben / kopiert; dort dann auch eine "Private Inner Class" erstellt.
    *Hier gab es schonmal keine Komplikationen mit Variablen.
    (habe im Prinzip eine EventHandelerKlasse geschrieben, die nur 1 Methode besitzt: die ActionPerformed Methode vom ActionListener)

    Zu meinem spezifischen Button-Problem:
    Man muss kein "setActionCommand" setzen, JAVA scheint automatisch zu erkennen was gebraucht wird, undzwar der Label meines Buttons. D.H. hatte der Button das Label "1", so wurde dieser String sogleich in meinem display übernommen 🙂



  • Schon.
    Aber wenn du mehrere Buttons hast, die die gleiche Beschriftung haben ( wird beim Taschenrechner eher selten vorkommen), da nn sollte man setActionCommand verwenden.


Anmelden zum Antworten