Swing setText()-Methode Funktioniert nicht

  • Themenstarter Themenstarter TGM-Schueler
  • Beginndatum Beginndatum
T

TGM-Schueler

Gast
Liebe Java-Forum.org-Community!
Ich programmiere jz schon seit 2 Wochen an einer APR-Hausübung herum und komme nicht auf den Fehler,keine Syntax-Erros oder Exeptions

Der Code ist der folgende :
Java:
public class RechnenPanel extends JPanel {

	private Button go;
	private JRadioButton ahochb,faktorielle;
	private JLabel basis,exponent,n,ergebnis;
	private JTextField basistxt,exponenttxt,ntxt,ergebnistxt;
	private JPanel p1,p2,p3;

	public RechnenPanel(){
		//Deklarieren der Elemente
		this.go = new Button("Berechnen");
        this.ahochb = new JRadioButton ("a^b");
		this.faktorielle = new JRadioButton ("a!");
        ButtonGroup auswahl = new ButtonGroup();
        auswahl.add(this.ahochb);
        auswahl.add(this.faktorielle);
		this.basistxt = new JTextField ("");
        this.exponenttxt = new JTextField ("");
        this.ntxt = new JTextField ("");
        this.ergebnistxt = new JTextField ("");
        this.basis = new JLabel("Basis :");
        this.exponent = new JLabel("Exponent :");
        this.n = new JLabel("n-te Zahl :");
        this.ergebnis = new JLabel("Ergebnis :");
        //Layout setzen

        ahochb.setActionCommand("A");


        setLayout(new GridLayout(3,4));

        //Panels erzeugen

        //Panel 1
        this.p1 = new JPanel();
        p1.setLayout (new GridLayout(1,2));
        p1.add(this.exponent);
        p1.add(this.exponenttxt);
        //Panel 2
        this.p2 =new JPanel();
           // Dieses Pannel dient nur als Platzhalter !

        //Panel 3
        this.p3 =new JPanel();
          // Dieses Pannel dient nur als Platzhalter !

        //Elemente positionieren

        //1.Zeile
        add(ahochb);
        add(basis);
        add(basistxt);
        add(p1);

        //2. Zeile
        add(this.faktorielle);
        add(n);
        add(ntxt);
        add(p2);

        //3. Zeile
        add(go);
        add(p3);
        add(ergebnis);
        add(ergebnistxt);



        //Elemente zum Actionlistener hinzufügen
        RechnenAction h= new RechnenAction();
        ahochb.addActionListener(h);
        faktorielle.addActionListener(h);
        basistxt.addActionListener(h);
        exponenttxt.addActionListener(h);
        ntxt.addActionListener(h);
        ergebnistxt.addActionListener(h);
        go.addActionListener(h);
	}
    private class RechnenAction implements ActionListener{
    	public void actionPerformed(ActionEvent e){

    		//Wenn Button ahochb gedrückt wurde,
    		if(ahochb.getActionCommand()=="A"){
                    if(e.getSource()==basistxt){
    			//Eingaben aufnehmen und in Zahlenwerte umwandeln
        		String eingabe1 =basistxt.getText();
        		int basis2 =Integer.parseInt(eingabe1);
                    
                    if(e.getSource()==exponenttxt){
        		String eingabe2 =exponenttxt.getText();
        		int exponent2 =Integer.parseInt(eingabe2);
                    

        		//Methoden zum berechnen aufrufen
    		 	if(e.getSource()==go){
    		 		int ergebnis =Rechnen.aHochbI(basis2,exponent2);
    		 		ergebnistxt.setText(""+ergebnis);
    		 	}
    		 		
    		 	}
                }
    		}
    	}


    		}



        }
 
und was ist deine Frage?
naja, wenn man sich die Mühe macht, den Code zu kopieren, unbekannte Klassen wie Rechnen auszubauen usw. dann darf man das Problem gnädig selber feststellen 😉

du hast die verschiedenen ifs für die einzelnen Buttons alle ineinander geschachtelt, die können doch unmöglich gleichzeitig true ergeben,
was ist überhaupt der Zweck der ifs, willst du prüfen ob in den Textfeldern irgendwas drinsteht?

hier ordentlich formatiert:
Java:
    private class RechnenAction  implements ActionListener {
        public void actionPerformed(ActionEvent e)  {
            // Wenn Button ahochb gedrückt wurde,
            if (ahochb.getActionCommand() == "A")     {
                if (e.getSource() == basistxt)   {
                    // Eingaben aufnehmen und in Zahlenwerte umwandeln
                    String eingabe1 = basistxt.getText();
                    int basis2 = Integer.parseInt(eingabe1);

                    if (e.getSource() == exponenttxt)   {
                        String eingabe2 = exponenttxt.getText();
                        int exponent2 = Integer.parseInt(eingabe2);

                        // Methoden zum berechnen aufrufen
                        if (e.getSource() == go)    {
                            int ergebnis = 4;
                            ergebnistxt.setText("" + ergebnis);
                        }
                    }
                }
            }
        }
    }
Strings übrigens immer mit equals vergleichen, nie mit ==
 
Zuletzt bearbeitet von einem Moderator:
Tut mir leid für die schlechte Aufbereitung des Codes nur ich war in den letzen Minuten des Unterrichts schon leicht gestreßt.
Ich hab den Code jz so formariert wie du es gesagt hast 😉
trotzdem funktioniert noch immer nichts.
Ja, die vielen IF's sind dazu da das kontrolliert wurde was alles gedrückt worden ist bzw ob was in den JTextfeldern was dirn ist.

Hier noch zusätzlich die 2 anderen Klassen :

Klasse Rechnen:
Java:
public class Rechnen {
	
	/**
	 * Methode zum potenzieren
	 * 
	 * @param exponent
	 * @param basis
	 * @return ergebnis Gibt das Ergebnis des potenzierten
	 * 		   zurück. 
	 */
	public static int aHochbI(int basis,int exponent){
		int ergebnis=1;
		if((basis >=0)&&(exponent >=0)){
			for(int i=exponent ;i >=0;i--){
				ergebnis =ergebnis*basis ;
			}
		}
		return ergebnis;
	}
	
	/**
	 * Methode zum faktoriseren.
	 * 
	 * @param n Positive ganzahlige Zahl. 
	 * @return ergebnis Gibt das Ergebnis des faktorisierten
	 * 		   zurück.
	 */
	public static int faktorielleI(int n){
		int ergebnis=1;
		for(int i =0;i==n;i++){
			ergebnis=ergebnis*i;
		}
		return ergebnis;
	}

}

Klasse RechnenGUI:
Java:
public class RechnenGUI extends JFrame {
    public static void main(String[] args){
        new RechnenGUI();        
    }
    public RechnenGUI(){
//Titelzeile setzen
setTitle("Mini-Rechner");
//Schließ-Aktivität setzen
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//MyPanel einfügen
Container C = this.getContentPane();
C.add(new RechnenPanel());
//sichtbar machen des Fensters
setVisible(true);
setSize(500,250);
    }
}

Danke im voraus für die Hilfe ! 😀
 
also mit e.getSource()-Vergleichen kommst du nicht weit, jedes Event hat genau eine Source, das kann in keinem Fall funktioneren,

wenn dann mache doch
Java:
String text = txtFeldXY.getText();
if (!"".equals(text)) {
   Integer parsen
   weiter gehts
}
Ineinanderschachtelung ist dann immer noch nicht so toll, aber könnte erstmal funktionieren
 
Aja und an SlaterB nochmals ein ganz ein großes Lob !, danke für das durch arbeiten durch meinen Chaos Code 😉
 

Zurück
Oben