Joke_r
Mitglied
Hallo Leute,
muss ein Applet schreiben, welches Primzahlen berechnet und diese dann in ner GUI ausgibt.
Es soll auf korekte Trennung zwischen UI und Fachkonzept geachtet werden.
Haben das ganze erst mal als Anwendung geschrieben, das hat auch funktioniert, haben es jetzt in ein Applet umgewandelt, jetzt funktioniert aber die Ausgabe in dem Textfeld nicht mehr.. ;-]
Es wird aus der FK-Klasse ein Vektor, der die bereits gefundenen Primzahlen beinhaltet, an die GUI übergeben, der Inhalt dort zu nem String verkettet und dann in der TextArea per setText() ausgegeben, es wird aber nix angezeigt...
Ich poste den code mal hier, wäre super, wenn irgendjemand ne Idee hat, wo unser Fehler liegt.
Danke schonmal :-D
Klasse PrimBerechnung
Klasse PrimGUI
Gruß,
Joke_r
muss ein Applet schreiben, welches Primzahlen berechnet und diese dann in ner GUI ausgibt.
Es soll auf korekte Trennung zwischen UI und Fachkonzept geachtet werden.
Haben das ganze erst mal als Anwendung geschrieben, das hat auch funktioniert, haben es jetzt in ein Applet umgewandelt, jetzt funktioniert aber die Ausgabe in dem Textfeld nicht mehr.. ;-]
Es wird aus der FK-Klasse ein Vektor, der die bereits gefundenen Primzahlen beinhaltet, an die GUI übergeben, der Inhalt dort zu nem String verkettet und dann in der TextArea per setText() ausgegeben, es wird aber nix angezeigt...
Ich poste den code mal hier, wäre super, wenn irgendjemand ne Idee hat, wo unser Fehler liegt.
Danke schonmal :-D
Klasse PrimBerechnung
Code:
/**
* Fachkonzept PrimBerechnung
* berechnet die Primzahlen
*/
import java.util.*;
public class PrimBerechnung extends Thread
{
//Attribute
private Vector v, prim;
private int grenze;
private int anzahl;
//ReferenzAttribut (nur zum Testen)
private static PrimBerechnung eineBerechnung;
//weitere Referenz attribute
private PrimGUI eineGUI;
//Konstruktor
public PrimBerechnung(int g, PrimGUI eineGUI)
{
super();
this.v = v;
prim = new Vector();
grenze = g;
anzahl = 0;
this.eineGUI = eineGUI;
prim.addElement(new Integer (0));
}
//Operationen
//prüft, ob die übergebene Zahl eine Primzahl ist.
public boolean pruefeZahl(int zahl)
{
for (int i = 2; i <= ((zahl+1)/2); i++)
{
if ((zahl % i) == 0)
{
return false;
}
}
return true;
}
//methode run
public void run()
{
int g = grenze;
while (true)
{
//abbrechen wenn stop gedückt
if (isInterrupted())
{
break;
}
// erstes Vektor-Element auf aktuell berechnete Zahl setzen
prim.set(0, new Integer(g));
System.out.println("Erstes Feld im Vektor auf die aktuell berechnete Zahl gesetzt");
//prüfen, ob g aktuell eine primzahl ist
if (pruefeZahl(g))
{
System.out.println("Primzahl gefunden : " + g);
prim.addElement(new Integer(g));
}
else
{
System.out.println("berechnung bei " + g);
// eineGUI.printZahl(g, prim);
}
eineGUI.printZahl(prim);
System.out.println("Ausgabe in GUI aufgerufen");
//aktuelle zahl hochzählen
g++;
}
}
}
Klasse PrimGUI
Code:
/**
* GUI-Klasse zu Primzahlberechnung
*/
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.applet.*;
public class PrimGUI extends Applet
{
//Attribute
private Button Start, Stop, Speichern;
private Label UeberschriftLabel, EingabeLabel, AusgabeLabel;
private TextField Eingabe;
private TextArea Ausgabe;
private int anzahl;
private Vector prim;
private boolean running = false;
//ReferenzAttribute
private static PrimGUI eineGUI;
//weitere Referenzattribute
private PrimBerechnung eineBerechnung;
private AktionsAbhoerer einAbhoerer;
//Konstruktor
public void init()
{
setLayout(null);
setSize(600,400);
setVisible(true);
setBackground(new Color(12632233));
// eineGUI=this;
//Label
UeberschriftLabel = new Label("Primzahlenberechnung",1);
UeberschriftLabel.setFont(new Font("Dialog", Font.BOLD, 14));
UeberschriftLabel.setBounds(10, 35, 560, 30);
add(UeberschriftLabel);
EingabeLabel = new Label("Untere Grenze", 1);
EingabeLabel.setBounds(10, 80, 100, 30);
add(EingabeLabel);
AusgabeLabel = new Label("Primzahlen ab eingegebener Grenze :", 1);
AusgabeLabel.setBounds(10, 130, 220, 30);
add(AusgabeLabel);
//TextField
Eingabe = new TextField("");
Eingabe.setBounds(130, 80, 50, 26);
add(Eingabe);
//TextArea
Ausgabe = new TextArea("",0,0);
Ausgabe.setEditable(false);
Ausgabe.setBounds(10, 170, 570, 200);
add(Ausgabe);
//Abhoerer
einAbhoerer = new AktionsAbhoerer();
//Buttons
Start = new Button("Start");
Start.setBounds(200, 80, 60, 30);
add(Start);
Start.addActionListener(einAbhoerer);
Stop = new Button("Stop");
Stop.setBounds(280,80,60,30);
add(Stop);
Stop.addActionListener(einAbhoerer);
Speichern = new Button("Speichern");
Speichern.setBounds(500, 80, 80, 30);
add(Speichern);
Speichern.addActionListener(einAbhoerer);
//nur vorläufig für Anwendung vvv
/*
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent event)
{
System.exit(1);
}
});
*/
}
//Operationen
public synchronized void printZahl(Vector p)
{
// prim = p;
System.out.println("Aufruf zur Ausgabe des Vektors bei GUI angekommen");
String zwischentext = "Berechnet wird: "+p.elementAt(0) + " Bisher gefundene Primzahlen: \n";
System.out.println(zwischentext);
for(int i=1; i<p.size(); i++)
{
zwischentext = zwischentext + p.elementAt(i) + " ";
if(i%10 == 0)
zwischentext += "\n";
}
//System.out.println(zwischentext);
//System.out.println("");
Ausgabe.setText(zwischentext);
System.out.println("Zahl geschrieben...");
eineGUI.start();
}
/*
public void printPrimzahl(int zahl)
{
Ausgabe.setCaretPosition(0);
System.out.println("PRIMZAHL AUSGABE , Caret auf 0");
Ausgabe.append(String.valueOf(zahl) + " ");
//System.out.println("Primzahl geschrieben...");
//Ausgabe.insert(String.valueOf(zahl), 0);
Ausgabe.append("\n");
//Ausgabe.insert(String.valueOf(zahl), anzahl);
//anzahl = anzahl + 5;
}
*/
//main
public void start()
{
eineGUI = new PrimGUI();
eineGUI.init();
}
//INNERE KLASSE AKTIONSABHOERER
public class AktionsAbhoerer implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
System.out.println("Button gedrückt");
if (e.getSource() == Start)
{
anzahl = 0;
running = true;
try
{
// Abfrage auf positive Begrenzung
if(Integer.valueOf(Eingabe.getText()).intValue() >= 0)
{
eineBerechnung = new PrimBerechnung(Integer.valueOf(Eingabe.getText()).intValue(), eineGUI);
eineBerechnung.start();
}
else
{
Ausgabe.setText("Bitte eine nicht-negative Grenze angeben");
}
}
// wird geworfen, wenn Nicht-Integer-Wert als Grenze angegeben wird
catch(NumberFormatException exc)
{
Ausgabe.setText("Bitte eine Zahl als Grenze eingeben!");
}
System.out.println("start-button gedrückt...");
}
if (e.getSource() == Stop)
{
eineBerechnung.interrupt();
running = false;
System.out.println("Stop button gedrückt...");
}
}
}
}
Gruß,
Joke_r