Primzahlfaktoren in der GUI

Brozilla

Mitglied
Ich habe ein Problem und zwar läuft mein Programm ganz gut, allerdings werden die Zahlen nicht so wiedergegeben wie sie es eigentlich hätten tun sollen. Die Zahlen der Zahlenreihe werden nacheinander überschrieben, sodass ich nicht [/icode]2*2*5*5(100)[/icode] erhalte sondern lediglich nur 5. Ich bin Dankbar für jede Antwort. Hier mein Quelltext:
Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.Font;

public class Echo_GUI extends JFrame implements ActionListener{
    private JLabel lEingabe, lAusgabe;
    private JTextField tEingabe ,tAusgabe;
    private JButton bEcho;

    public Echo_GUI()
    {
        super("Echo_GUI...");
        setSize(1000,800);
        setResizable(false);
        setLocationRelativeTo(null);
        setLayout(null);
        setTitle("Primzahl Berechnung");
        Color c = new Color(15, 160 ,20);
        getContentPane().setBackground(c);
        Font schrift= new Font("Serif", Font.BOLD, 30);

        lEingabe = new JLabel ("    Zahl Eingeben");
        lAusgabe = new JLabel ("    Primzahl Faktoren");
        tEingabe = new JTextField ("");
        tAusgabe = new JTextField ("");
        bEcho    = new JButton ("Zerlegen");

        lEingabe.setBounds(200,100,250,75);
        lAusgabe.setBounds(580,100,300,75);
        tEingabe.setBounds(200,200,250,75);
        tAusgabe.setBounds(600,200,250,75);
        bEcho.setBounds(350,600,300,100);

        tEingabe.setFont(schrift);
        tAusgabe.setFont(schrift);
        lEingabe.setFont(schrift);
        lAusgabe.setFont(schrift);
        bEcho.setFont(schrift);

        bEcho.addActionListener(this);
      
        add(lEingabe);
        add(lAusgabe);
        add(tEingabe);
        add(tAusgabe);
        add(bEcho);

        setVisible(true);
    }

    public void actionPerformed(ActionEvent e){
        if (e.getSource()==bEcho){
            String Toll = tEingabe.getText();
            int pn= Integer.parseInt(Toll);
            int dummy=2;
            while (pn>1){
              
                while (pn % dummy == 0){
                    pn/=dummy;
                  
                    String AusgabeDummy = String.valueOf(dummy);
                    tAusgabe.setText(String.valueOf(AusgabeDummy));
                }
                dummy++;
           }

        }

    }
}
Mein Fehler befindet sich in der public void actionPerformed ab der while Schleife.
 
Zuletzt bearbeitet von einem Moderator:

Robat

Top Contributor
Naja du holst dir den Text mittels getText() und fügst an diesen dein neuen String dran (mit dem + Operator) . Das Resultat fügst du dann in dein TextField ein.
Code Tags:siehe meine Signatur
 

Brozilla

Mitglied
Danke dir für die Antwort!
Also:
AusgabeDummy.getText(tAusgabe.setText());

So würde es nicht funktionieren, da eine Fehlermeldung erscheint.

Könntest du das evtl kurz Schreiben?
 

Brozilla

Mitglied
Java:
public void actionPerformed(ActionEvent e){
if (e.getSource()==bEcho){
String Toll = tEingabe.getText();
int pn= Integer.parseInt(Toll);
int dummy=2;
while (pn>1){ 

while (pn % dummy == 0){
pn/=dummy;

String AusgabeDummy = String.valueOf(dummy);
tAusgabe.setText(String.valueOf(AusgabeDummy));
}
dummy++;
}

} 

}
 

Robat

Top Contributor
Ja genau. Und jetzt schaust du dir noch mal an welche Methode du wie aufrufst.
Java:
AusgabeDummy.getText(Ausgabe.setText());
 

Brozilla

Mitglied
Erstmal konvertiere ich ja den dummy in einen String, da integer nicht auslesbar sind bei getText. Dann nimmt er den Wert des konvertierten dummy (AusgabeDummy) und fügt ihn dann in das textfeld tAusgabe. Bei jedem durchlauf der Schleife überschreibt er ja dann die vorrige Zahl, da sich der Wert von Dummy ja ändert.
 

Robat

Top Contributor
Hier mal ein kleines Beispiel.
Vielleicht wird dann klarer was dein Denkfehler mit den Settern/Gettern ist.
Java:
JTextField jtf = new JTextField();
jtf.setText("Hallo");

String text = jtf.getText();
jtf.setText(text + " Welt");

// Im JTextField steht nun: Hallo Welt
 

Manco0815

Neues Mitglied
Hallo,
Jetzt ist besteht aber immernoch das Problem, dass das Ergebnis "dummy" aus der Schleife immer überschrieben wird und wir schaffen es nicht, dass das Zwischenergebnis von dummy auch aufgelistet wird. Es soll also das Zwischenergebnis da stehen, dann wieder ein Zwischenergebnis usw. bis die Schleife nicht mehr durchlaufen wird.
Bei uns wird das Zwischenergebnis dann immer überschrieben, sodass am Ende nur ein Ergebnis da steht.
Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Echo_HA extends JFrame implements ActionListener
{
    private JLabel lEingabe, lAusgabe;
    private JTextField tEingabe ,tAusgabe;
    private JButton bEcho;

    public Echo_HA()
    {
        super("Echo_GUI...");
        setSize(800,600);
        setResizable(true);
        setLocation(100,100);
        setLayout(null);

        lEingabe = new JLabel ("Text Eingeben");
        lAusgabe = new JLabel ("Gespiegelt");
        tEingabe = new JTextField ("");
        tAusgabe = new JTextField ("");
        bEcho    = new JButton ("Echo");

        setSize(800,600);
        setResizable(true);
        setLocation(100,100);
        setLayout(null);

        lEingabe.setBounds(10,10,100,20);
        lAusgabe.setBounds(210,10,100,20);
        tEingabe.setBounds(10,60,100,20);
        tAusgabe.setBounds(210,60,100,20);
        bEcho.setBounds(110,200,200,50);

        bEcho.addActionListener(this);

        add(lEingabe);
        add(lAusgabe);
        add(tEingabe);
        add(tAusgabe);
        add(bEcho);

        setVisible(true);
    }

    public void actionPerformed(ActionEvent e){
        if (e.getSource()==bEcho){
            String Toll = tEingabe.getText();
            int pn= Integer.parseInt(Toll);
            int dummy=2;
            while (pn>1){

                while (pn % dummy == 0){
                    pn/=dummy;
                    String AusgabeDummy = String.valueOf(dummy);
                    tAusgabe.setText(AusgabeDummy);                   
                    String text = tAusgabe.getText();
                    tAusgabe.setText(text);
                   
                    //tAusgabe.setText(String.valueOf(AusgabeDummy));
                    //tAusgabe.setText(AusgabeDummy.getText());
                }
                dummy++;
            }

        }

    }
}
 

Robat

Top Contributor
Java:
while(pn % dummy == 0) {
     pn /= dummy;

     // (1) alten Text aus tvAusgabe holen mittel getText() und in einer Variable abspeichern
     // (2) Zahl in einen String wandeln und in einer Variable speichern [eigentlich nicht notwendig]
     // (3) Variable aus (1) und (2) zusammenfügen (mit + Operator) und in einer Variable speichern
     // (4) tvAusgabe aktualisieren, indem setText() aufgerufen wird und die Variable aus (3) übergeben wird
}

Viel mehr Hilfestellung kann man jetzt wirklich nicht geben ohne dir die fertige Lösung hinzuklatschen.
Schau dir an was ich in Post#11 gemacht habe, schau dir die Prosaform hier an und dann überleg wie du das kombinieren kannst.
Wenn man mit GUI arbeiten will müsste das eigentlich sitzen. :oops:

PS: Wenn du das alles richtig machst steht danach in deinem JTextfield (beispielhaft) 1 2 3 4. Du kannst aber natürlich in Schritt (3) dir den String so zusammenbasteln, dass da 1 * 2 * 3 * 4 steht, indem du einfach ein * dazwischen haust. A lá: String res = textVomTextField + " * " + zahl.
 

Neue Themen


Oben