Hallo allerseits, ich programmiere an dem "Spiel des Leben".
Ich habe mehrere .java-Dateien für das Spiel (View.java, Controller.java, World.java, CellGrid.java)
Für Ausführung ist nur die Klasse View.java zuständig (weil nur View.java die main()-Methode enthält).
View.java verwendet alle anderen Klassen als Objekte usw..
Nach dem "Compilieren" mit javac läuft alles einwandfrei.
Nun möchte ich aus VIew.java ein Applet schreiben (also ohne main())
Mein Problem ist, dass ich nicht genau weiß, wie ich die Applet-Methoden init(), start(), stop(), destroy() in View.java schreiben soll?
Hier ist der Code aus der Klasse View.java:
[JAVA=1]
import java.awt.*;
import java.util.*;
import javax.swing.*;
public class View extends JFrame implements Observer{
private CellGrid sv;
private Controller c;
private ButtonGroup modeRadioGroup;
private JRadioButton torusRadioButton;
private JRadioButton flatRadioButton;
private ButtonGroup worldRadioGroup;
private JRadioButton arrayRadioButton;
private JRadioButton bitRadioButton;
private JTextField generationsTextField;
private JTextField cellDisplay;
private JTextField lineDisplay;
private JSlider slider;
private JLabel generationLabel;
public static int MAX_MILLIS_PER_STEP = 250;
public static int MIN_MILLIS_PER_STEP = 10;
public View(){
super("Spiel des Lebens");
//Fenster schliessen
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
//Groesse des Fensters wird festgelegt
this.setPreferredSize(new Dimension(900, 658));
/**
*ButtonPanel wird erzeugt, dieser enthaelt
*- Radiobuttons, um zwischen flacher- und TorusWelt zu waehlen
*- Radiobuttons, um zwischen Array- und BitsetWorld zu waehlen
*/
//Erstellen eines Containers, wo die Buttons platziert werden
JPanel buttonPanel = new JPanel ();
this.add(buttonPanel, BorderLayout.SOUTH);
//Erzeugen der Buttons und Hinzufuegen in das JPanel ButtonPanel
buttonPanel.setLayout(new FlowLayout());
modeRadioGroup = new ButtonGroup();
torusRadioButton = new JRadioButton ("Torus");
// Default : Torus is selected
torusRadioButton.setSelected(true);
modeRadioGroup.add(torusRadioButton);
buttonPanel.add(torusRadioButton);
flatRadioButton = new JRadioButton("Flach");
modeRadioGroup.add(flatRadioButton);
buttonPanel.add(flatRadioButton);
worldRadioGroup = new ButtonGroup();
arrayRadioButton = new JRadioButton ("Array");
// Default : Torus is selected
arrayRadioButton.setSelected(true);
worldRadioGroup.add(arrayRadioButton);
buttonPanel.add(arrayRadioButton);
bitRadioButton = new JRadioButton("BitSet");
worldRadioGroup.add(bitRadioButton);
buttonPanel.add(bitRadioButton);
JButton stopButton = new JButton("Stop");
buttonPanel.add(stopButton);
JButton startButton = new JButton("Start");
JButton clearButton = new JButton("Clear");
JButton chooseButton = new JButton("Durchsuchen");
JButton saveButton = new JButton("Save");
//Ein Textfeld um die Generationen einzugeben
generationsTextField = new JTextField (3);
buttonPanel.add(generationsTextField);
generationsTextField.setEditable(true);
generationLabel = new JLabel(" Generation(en) ");
//ButtonPanel.add(new JLabel("Generation(en)"));
buttonPanel.add(generationLabel);
buttonPanel.add(chooseButton);
buttonPanel.add(startButton);
buttonPanel.add(clearButton);
buttonPanel.add(saveButton);
/**
*CellPanel wird erzeugt, dieser enthaelt:
*- Textfelder, um die Groesse der Zellen und die Lineienstaerke zu konfigurieren (cellDisplay, lineDisplay)
*- OKButton, um diese Konfiguration umzusetzten
*- Slider, um die Geschwindigkeit der Spiels zu variieren
*/
//Erstellen eines Containers, wo Slider und Textfelder plaziert werden
JPanel CellPanel = new JPanel ();
this.add(CellPanel, BorderLayout.NORTH);
//Ein Textfeld um die Pixel der Zellen einzugeben
cellDisplay = new JTextField (3);
CellPanel.add(cellDisplay);
cellDisplay.setEditable(true);
CellPanel.add(new JLabel("Pix Cell"));
//Ein Textfeld um die Dicke der Linien einzugeben
lineDisplay = new JTextField (3);
CellPanel.add(lineDisplay);
lineDisplay.setEditable(true);
CellPanel.add(new JLabel("Line"));
//OK Button zum bestäaetigen der Aenderungen am Spielfeld (Zellen und Linien)
JButton okButton = new JButton ("OK");
CellPanel.add(okButton);
//Slider um die Geschwindigkeit einstellen zu können
CellPanel.add(new JLabel("|slow|"));
slider = new JSlider();
this.slider.setMinimum(0);
this.slider.setMaximum(MAX_MILLIS_PER_STEP - MIN_MILLIS_PER_STEP);
this.slider.setValue(MAX_MILLIS_PER_STEP / 2);
CellPanel.add(slider);
CellPanel.add(new JLabel("|fast|"));
this.pack();
this.setVisible(true);
// Erstelle Controller
this.c = new Controller(this);
// Erstelle Sub-View
this.sv = new CellGrid(c);
this.add(sv, BorderLayout.CENTER);
/**
*Allen Buttons wird ein Controller (c) hinzugefügt, damit auch etwas passiert beim Klicken der Buttons
*
*
*
*/
// Haenge Controller als Listener an die Elemente
this.addComponentListener(c);
startButton.addActionListener(c);
chooseButton.addActionListener(c);
stopButton.addActionListener(c);
clearButton.addActionListener(c);
okButton.addActionListener(c);
saveButton.addActionListener(c);
slider.addChangeListener(c);
arrayRadioButton.addActionListener(c);
bitRadioButton.addActionListener(c);
}
/**
*Es kann zwischen Torus und flacher Welt gewaehlt werden.
*@return: 0 für TorusWelt
*@return: 1 für flache Welt
*@return: -1 keine Auswahl
*
*
*
*/
/* liefert entweder Torus oder Flache Welt zurück
* 0 steht für Torus
* 1 für flache Welt
* -1 wenn gar nichts angeklickt wurde*/
public int getType(){
if(modeRadioGroup.getSelection() == torusRadioButton.getModel()){
return 0;
}
if(modeRadioGroup.getSelection() == flatRadioButton.getModel()){
return 1;
}
return -1;
}
/**
*Es kann zwischen Array und Bitset-Model gewaehlt werden
*@return: 0 für Array
*@return: 1 für BitSet
*@return:-1 keine Auswahl
*
*
*
*/
public int getWorld(){
if(worldRadioGroup.getSelection() == arrayRadioButton.getModel()){
return 0;
}
if(worldRadioGroup.getSelection() == bitRadioButton.getModel()){
return 1;
}
return -1;
}
/* liefert den Wert des Textfeldes zurück
* 0 wenn leer
* -1 wenn ungültige Eingabe */
/**
*Es wird die Anzahl der Generationen eingelesen
*@return: 0 für ein leeres Textfeld
*@return: -1 für eine falsche Eingabe
*@return: eingelesenr Text als Integer
*
*
*
*/
public int getGenerations(){
try {
if (generationsTextField.getText().isEmpty()){
return 0;
}
return Integer.parseInt(generationsTextField.getText());
} catch (NumberFormatException e){
return -1;
}
}
/**
*Es wird die Groesse der Zellen eingelesen
*@return: 0 für ein leeres Textfeld
*@return: -1 für eine falsche Eingabe
*@return: eingelesener Text als Integer
*
*
*
*/
public int getPix(){
try {
if (cellDisplay.getText().isEmpty()){
return 0;
}
return Integer.parseInt(cellDisplay.getText());
} catch (NumberFormatException e){
return -1;
}
}
/**
*Es wird die Staerke der Linie eingelesen
*@return: 0 für ein leeres Textfeld
*@return: -1 für eine falsche Eingabe
*@return: eingelesener Text als Integer
*
*
*
*/
public int getStroke(){
try {
if (lineDisplay.getText().isEmpty()){
return 0;
}
return Integer.parseInt(lineDisplay.getText());
} catch (NumberFormatException e){
return -1;
}
}
/**
*Es wird die Geschwindigkeit eingestellt
*@return: aktuelle Geschwindigkeit
*/
public int getSpeed(){
return MAX_MILLIS_PER_STEP - slider.getValue();
}
/**
*die Anzahl der Generationen wird fortlaufend gezaehlt
*/
public void setGenerationLabel(int counter) {
this.generationLabel.setText("Generation : " + counter);;
}
public JLabel getGenerationLabel() {
return this.generationLabel;
}
/* liefert die Oberfläche mit den Zellen*/
public CellGrid getCellGrid(){
return this.sv;
}
/**
*Das fenster wird ueberschrieben
*/
public void update(Observable o, Object arg1) {
this.sv.repaint();
this.repaint();
}
/* Main Methode*/
public static void main(String[] args){
View v = new View();
v.setVisible(true);
}
}
[/code]
Danke für eure Hilfe
Doraemon
Ich habe mehrere .java-Dateien für das Spiel (View.java, Controller.java, World.java, CellGrid.java)
Für Ausführung ist nur die Klasse View.java zuständig (weil nur View.java die main()-Methode enthält).
View.java verwendet alle anderen Klassen als Objekte usw..
Nach dem "Compilieren" mit javac läuft alles einwandfrei.
Nun möchte ich aus VIew.java ein Applet schreiben (also ohne main())
Mein Problem ist, dass ich nicht genau weiß, wie ich die Applet-Methoden init(), start(), stop(), destroy() in View.java schreiben soll?
Hier ist der Code aus der Klasse View.java:
[JAVA=1]
import java.awt.*;
import java.util.*;
import javax.swing.*;
public class View extends JFrame implements Observer{
private CellGrid sv;
private Controller c;
private ButtonGroup modeRadioGroup;
private JRadioButton torusRadioButton;
private JRadioButton flatRadioButton;
private ButtonGroup worldRadioGroup;
private JRadioButton arrayRadioButton;
private JRadioButton bitRadioButton;
private JTextField generationsTextField;
private JTextField cellDisplay;
private JTextField lineDisplay;
private JSlider slider;
private JLabel generationLabel;
public static int MAX_MILLIS_PER_STEP = 250;
public static int MIN_MILLIS_PER_STEP = 10;
public View(){
super("Spiel des Lebens");
//Fenster schliessen
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
//Groesse des Fensters wird festgelegt
this.setPreferredSize(new Dimension(900, 658));
/**
*ButtonPanel wird erzeugt, dieser enthaelt
*- Radiobuttons, um zwischen flacher- und TorusWelt zu waehlen
*- Radiobuttons, um zwischen Array- und BitsetWorld zu waehlen
*/
//Erstellen eines Containers, wo die Buttons platziert werden
JPanel buttonPanel = new JPanel ();
this.add(buttonPanel, BorderLayout.SOUTH);
//Erzeugen der Buttons und Hinzufuegen in das JPanel ButtonPanel
buttonPanel.setLayout(new FlowLayout());
modeRadioGroup = new ButtonGroup();
torusRadioButton = new JRadioButton ("Torus");
// Default : Torus is selected
torusRadioButton.setSelected(true);
modeRadioGroup.add(torusRadioButton);
buttonPanel.add(torusRadioButton);
flatRadioButton = new JRadioButton("Flach");
modeRadioGroup.add(flatRadioButton);
buttonPanel.add(flatRadioButton);
worldRadioGroup = new ButtonGroup();
arrayRadioButton = new JRadioButton ("Array");
// Default : Torus is selected
arrayRadioButton.setSelected(true);
worldRadioGroup.add(arrayRadioButton);
buttonPanel.add(arrayRadioButton);
bitRadioButton = new JRadioButton("BitSet");
worldRadioGroup.add(bitRadioButton);
buttonPanel.add(bitRadioButton);
JButton stopButton = new JButton("Stop");
buttonPanel.add(stopButton);
JButton startButton = new JButton("Start");
JButton clearButton = new JButton("Clear");
JButton chooseButton = new JButton("Durchsuchen");
JButton saveButton = new JButton("Save");
//Ein Textfeld um die Generationen einzugeben
generationsTextField = new JTextField (3);
buttonPanel.add(generationsTextField);
generationsTextField.setEditable(true);
generationLabel = new JLabel(" Generation(en) ");
//ButtonPanel.add(new JLabel("Generation(en)"));
buttonPanel.add(generationLabel);
buttonPanel.add(chooseButton);
buttonPanel.add(startButton);
buttonPanel.add(clearButton);
buttonPanel.add(saveButton);
/**
*CellPanel wird erzeugt, dieser enthaelt:
*- Textfelder, um die Groesse der Zellen und die Lineienstaerke zu konfigurieren (cellDisplay, lineDisplay)
*- OKButton, um diese Konfiguration umzusetzten
*- Slider, um die Geschwindigkeit der Spiels zu variieren
*/
//Erstellen eines Containers, wo Slider und Textfelder plaziert werden
JPanel CellPanel = new JPanel ();
this.add(CellPanel, BorderLayout.NORTH);
//Ein Textfeld um die Pixel der Zellen einzugeben
cellDisplay = new JTextField (3);
CellPanel.add(cellDisplay);
cellDisplay.setEditable(true);
CellPanel.add(new JLabel("Pix Cell"));
//Ein Textfeld um die Dicke der Linien einzugeben
lineDisplay = new JTextField (3);
CellPanel.add(lineDisplay);
lineDisplay.setEditable(true);
CellPanel.add(new JLabel("Line"));
//OK Button zum bestäaetigen der Aenderungen am Spielfeld (Zellen und Linien)
JButton okButton = new JButton ("OK");
CellPanel.add(okButton);
//Slider um die Geschwindigkeit einstellen zu können
CellPanel.add(new JLabel("|slow|"));
slider = new JSlider();
this.slider.setMinimum(0);
this.slider.setMaximum(MAX_MILLIS_PER_STEP - MIN_MILLIS_PER_STEP);
this.slider.setValue(MAX_MILLIS_PER_STEP / 2);
CellPanel.add(slider);
CellPanel.add(new JLabel("|fast|"));
this.pack();
this.setVisible(true);
// Erstelle Controller
this.c = new Controller(this);
// Erstelle Sub-View
this.sv = new CellGrid(c);
this.add(sv, BorderLayout.CENTER);
/**
*Allen Buttons wird ein Controller (c) hinzugefügt, damit auch etwas passiert beim Klicken der Buttons
*
*
*
*/
// Haenge Controller als Listener an die Elemente
this.addComponentListener(c);
startButton.addActionListener(c);
chooseButton.addActionListener(c);
stopButton.addActionListener(c);
clearButton.addActionListener(c);
okButton.addActionListener(c);
saveButton.addActionListener(c);
slider.addChangeListener(c);
arrayRadioButton.addActionListener(c);
bitRadioButton.addActionListener(c);
}
/**
*Es kann zwischen Torus und flacher Welt gewaehlt werden.
*@return: 0 für TorusWelt
*@return: 1 für flache Welt
*@return: -1 keine Auswahl
*
*
*
*/
/* liefert entweder Torus oder Flache Welt zurück
* 0 steht für Torus
* 1 für flache Welt
* -1 wenn gar nichts angeklickt wurde*/
public int getType(){
if(modeRadioGroup.getSelection() == torusRadioButton.getModel()){
return 0;
}
if(modeRadioGroup.getSelection() == flatRadioButton.getModel()){
return 1;
}
return -1;
}
/**
*Es kann zwischen Array und Bitset-Model gewaehlt werden
*@return: 0 für Array
*@return: 1 für BitSet
*@return:-1 keine Auswahl
*
*
*
*/
public int getWorld(){
if(worldRadioGroup.getSelection() == arrayRadioButton.getModel()){
return 0;
}
if(worldRadioGroup.getSelection() == bitRadioButton.getModel()){
return 1;
}
return -1;
}
/* liefert den Wert des Textfeldes zurück
* 0 wenn leer
* -1 wenn ungültige Eingabe */
/**
*Es wird die Anzahl der Generationen eingelesen
*@return: 0 für ein leeres Textfeld
*@return: -1 für eine falsche Eingabe
*@return: eingelesenr Text als Integer
*
*
*
*/
public int getGenerations(){
try {
if (generationsTextField.getText().isEmpty()){
return 0;
}
return Integer.parseInt(generationsTextField.getText());
} catch (NumberFormatException e){
return -1;
}
}
/**
*Es wird die Groesse der Zellen eingelesen
*@return: 0 für ein leeres Textfeld
*@return: -1 für eine falsche Eingabe
*@return: eingelesener Text als Integer
*
*
*
*/
public int getPix(){
try {
if (cellDisplay.getText().isEmpty()){
return 0;
}
return Integer.parseInt(cellDisplay.getText());
} catch (NumberFormatException e){
return -1;
}
}
/**
*Es wird die Staerke der Linie eingelesen
*@return: 0 für ein leeres Textfeld
*@return: -1 für eine falsche Eingabe
*@return: eingelesener Text als Integer
*
*
*
*/
public int getStroke(){
try {
if (lineDisplay.getText().isEmpty()){
return 0;
}
return Integer.parseInt(lineDisplay.getText());
} catch (NumberFormatException e){
return -1;
}
}
/**
*Es wird die Geschwindigkeit eingestellt
*@return: aktuelle Geschwindigkeit
*/
public int getSpeed(){
return MAX_MILLIS_PER_STEP - slider.getValue();
}
/**
*die Anzahl der Generationen wird fortlaufend gezaehlt
*/
public void setGenerationLabel(int counter) {
this.generationLabel.setText("Generation : " + counter);;
}
public JLabel getGenerationLabel() {
return this.generationLabel;
}
/* liefert die Oberfläche mit den Zellen*/
public CellGrid getCellGrid(){
return this.sv;
}
/**
*Das fenster wird ueberschrieben
*/
public void update(Observable o, Object arg1) {
this.sv.repaint();
this.repaint();
}
/* Main Methode*/
public static void main(String[] args){
View v = new View();
v.setVisible(true);
}
}
[/code]
Danke für eure Hilfe
Doraemon