Die Klasse Monster

Saban

Erfahrenes Mitglied
Hallo Zusammen!

ich bin neu hier und würde mich freuen wenn ihr mir bei dem Problem weiter helfen könntet :) wir fangen gerade mit der Objektorientierung an und sollen ne Klasse Monster anlegen in dem wir 3 Konstruktoren haben und getter und setter Methoden für die Eigenschaften:

- Name (String - max. 20 Zeichen),
- Weight (Double - 10 - 200),
- HitPoints (Long - 0 - 3 Mrd.),
- foodUsage (Integer - 10 - 100),
- ResistTyp (String - Fire, Lightning, Ice, No),
- isMagicAttacker (Boolean - true oder false)

leider habe ich nicht viel Ahnung von Oberflächen will aber auch nicht 6 Abfragen mit dem JOptionPane stellen... Ich hab mir gedacht ich benutze JLabels und JTextFields, jedoch habe ich keine Ahnung wie ich diese Einschränken und auf die Wahrheit abfragen soll... hättet ihr vllt paar tips für mich? vor allem wie ich die getter und setter mit einbauen könnte :confused:

Danke schon mal!
Saban
 
Hey danke für die Antwort! :)
Ich habs mir aber im OpenBook "Java ist auch eine Insel" (Kapitel 14) angeschaut ist auf deutsch und super einfach erklärt
 
Hi!

Ich habs jetzt so weit das ich ein Fenster und alles andere was ich brauch erstellt hab.

Code:
package Klasse_11;

import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class MonsterCheck 
{
	public static void main(String [] args)
	{
		/*Objekt Monster*/
		Monster monster = new Monster();
		
		/*Das Fenster*/
		JFrame frame = new JFrame("Monster Check");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setResizable(false);
		
		/*JButton*/
		JButton bt_erstell = new JButton("Erstellen"); 
		
		/*ActionListener vom JButton*/
		bt_erstell.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				//Überprüfen der Textfelder
				//Einlesen des Inhalts des Textfeldes				//Ausgeben des Monster-Objektes 			}
		});
		
		/*Die Labels*/
		JLabel lb_name 		= new JLabel("Name:");
		JLabel lb_gewicht 	= new JLabel("Gewicht:");
		JLabel lb_hits 		= new JLabel("Hit Points:");
		JLabel lb_food 		= new JLabel("Food Usage:");
		JLabel lb_resist 	= new JLabel("Resist Typ");
		JLabel lb_magic		= new JLabel("Magic Attacker");
		
		/*Die ComboBoxen*/
		String resTyp[] = {"Fire", "Water", "Earth", "Nothing"};
	    JComboBox box_resist = new JComboBox();
	    
	    for ( int i = 0; i < resTyp.length; i++ )
	    	box_resist.addItem( resTyp[i] );
			    
		String magic[] = {"Yes", "No"};
	    JComboBox box_magic = new JComboBox();
	    
	    for ( int i = 0; i < magic.length; i++ )
	    	box_magic.addItem( magic[i] );
	    
	    /*Die Textfelder*/
		JTextField tf[]		= new JTextField[4];
		
		for(int index = 0; index < 4; index++){
			tf[index] = new JTextField();
			tf[index].setHorizontalAlignment(JTextField.LEFT);
		}
		
		/*Positionieren der Elemente*/
	    Container c = frame.getContentPane();
	    c.setLayout( null );
	    
	    int lb_breite = 100;
	    int tf_breite = 100;
	    int tf_posy = 10;
	    
	    lb_name.setBounds	( 10, 10, lb_breite, 20);
	    lb_gewicht.setBounds( 10, 40, lb_breite, 20);
	    lb_hits.setBounds	( 10, 70, lb_breite, 20);
	    lb_food.setBounds	( 10,100, lb_breite, 20);
	    lb_resist.setBounds	( 10,130, lb_breite, 20);
	    lb_magic.setBounds	( 10,160, lb_breite, 20);
		
	    box_resist.setBounds(120,130, tf_breite, 20);
	    box_magic.setBounds	(120,160, tf_breite, 20);
	    
	    bt_erstell.setBounds(120,190, lb_breite, 20);
	    
	    for(int index = 0; index < 4; index++){
	    	tf[index].setBounds(lb_breite+20, tf_posy, tf_breite, 20);
	    	c.add(tf[index]);
	    	tf_posy = tf_posy + 30;
	    }
	    
	    /*Container füllen*/
	    c.add(lb_name); c.add(lb_gewicht); c.add(lb_hits); c.add(lb_food);
	    c.add(lb_resist); c.add(lb_magic); c.add(bt_erstell); c.add(box_magic);
	    c.add(box_resist);
	    
	    /*Fenster Eigenschaften*/
		frame.setSize(240, 245);
		frame.setVisible(true);
	}
}

Jetzt hab ich ne Frage und zwar wie schaff ich es dem ActionListener Variablen zu übergeben und zwar will ich ein Unterprogramm im ActionListener aufrufen aber der kennt die Variablen in dem AL nicht... :( muss ich die Variablen, die ich übergeben will als globale Variable setzen:confused:
Und wie kann ich die Textfelder am besten abprüfen:confused:

Grüße
 
Alles in die Main-Methode reinschreiben ist sowieso nicht der schöne Weg.

Am Besten ist es wenn du das was du in der main-Methode machst alles in einer Methode MonsterCheck. Ich nenne die immer init.

Dann erstellt du dir in der main nur noch ein Objekt von MonsterCheck und rufst die Methode init auf. Eigentlich macht man das noch ein wenig anders aber zuviel auf einmal will ich dir auch nicht zumuten ;)

Für dein Problem mit dem ActionListener gibt es zwei Möglichkeiten. Die eine wäre eine eigene Klasse zu erstellen die von ActionListener erbt. Aber ich weiss nicht ob ihr sowas schon hattet.

Die andere ist alles was du an Variablen benötigst als Felder (also ausserhalb einer Methode) in der Klasse MonsterCheck anzulegen. Dann kannst du diese auch innerhalb des ActionListener benutzen :)

Zu deinem Problem mit dem prüfen der Textfelder. Für alle Sachen die mit Zahlen zu tun haben brauchst du kein Textfeld. Da gibt es auch noch spezielle Komponenten für durch die du dir das überprüfen sparen kannst da man an diesen Komponenten einstellen kann von wo bis wo die Werte gehen dürfen.
 
Hi,

erst mal danke für deinen Post! :D also ich hoffe ich habe es richtig verstanden was du mir sagen wolltest... und habe nun
Code:
public class MonsterCheck 
{
	public static void main(String [] args)
	{
		/*Objekt Monster*/
		Monster monster = new Monster();
		init();
	}
	
	public static void init()
	{
		/*Das Fenster*/
		JFrame frame = new JFrame("Monster Check");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setResizable(false);
		....
		frame.setSize(240, 245);
		frame.setVisible(true);		
	}
}
könntest du mir noch sagen welche Möglichkeiten es gibt die Textfelder abzuprüfen? :) hab probiert JFormattedTextfield zu verwenden aber habs irgendwie nicht hin bekommen... :(
Zu dem ActionListener ist es schwer mit der vererbung oder könnte man sich da rein lesen wenn man gerade mit der Objekt-Orientierung angefangen hat :confused: ansonsten mach ich einfach Globale Variablen draus...
Grüße
 
Nein was ich meine ist:

Java:
public class MonsterCheck {
//Das ist ein Felder der Klasse MonsterCheck
private JComboBox box_magic
 private void init(){
      //....... dein Code
     // .... alles was du im ActionListener brauchst, machst du so
    // dass du es einem Feld zuweist.
     box_magic = new JComboBox();
  }

   public static void main(String [] args){
        MonsterCheck monsterCheck = new MonsterCheck();
        check.init();
   }
}

Nochmal zu Erklärung: static bedeutet dass du keine Instanz (ein Objekt) einer Klasse brauchst um eine Methode aufzurufen. Daher kannst du aus Methoden die static sind auch keine Felder einer Klasse benutzen.

Für alles was mit Zahlen zu tun hat solltest du einen JSpinner verwenden mit einem SpinnerNumberModel.

Was hast du denn mit dem JFormattedTextField versucht?
 
Hi,

erst mal vielen vielen Dank das du dir so viel zeit nimmst und mir hilfst das problem zu lösen :) also ich habs jetzt (hoffentlich) so gemacht wie du es mir erklären wolltest

Code:
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class MonsterCheck 
{
	private JFrame frame;
	private JButton bt_erstell;
	private JLabel lb_name;
	private JLabel lb_gewicht;
	private JLabel lb_hits;
	private JLabel lb_food;
	private JLabel lb_resist;
	private JLabel lb_magic;
	private JComboBox box_resist;
	private JComboBox box_magic;
	private JTextField tf[] = new JTextField[4];;
	
	private void init()
	{
		/*Das Fenster*/
		frame = new JFrame("Monster Check");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setResizable(false);
		
		/*JButton*/
		bt_erstell = new JButton("Erstellen"); 
		
		/*ActionListener vom JButton*/
		bt_erstell.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				//Überprüfen der Textfelder
				//Einlesen des Inhalts des Textfeldes --> Setter
				//Ausgeben des Monster-Objektes --> Getter
			}
		});
		
		/*Die Labels*/
		lb_name 	= new JLabel("Name:");
		lb_gewicht 	= new JLabel("Gewicht:");
		lb_hits 	= new JLabel("Hit Points:");
		lb_food 	= new JLabel("Food Usage:");
		lb_resist 	= new JLabel("Resist Typ");
		lb_magic	= new JLabel("Magic Attacker");
		
		/*Die ComboBoxen*/
		String resTyp[] = {"Fire", "Water", "Earth", "Nothing"};
	    box_resist = new JComboBox();
	    
	    for ( int i = 0; i < resTyp.length; i++ )
	    	box_resist.addItem( resTyp[i] );
	    
		String magic[] = {"Yes", "No"};
	    box_magic = new JComboBox();
	    
	    for ( int i = 0; i < magic.length; i++ )
	    	box_magic.addItem( magic[i] );
	    
	    /*Die Textfelder*/
	    for(int index = 0; index < 4; index++){
			tf[index] = new JTextField();
			tf[index].setHorizontalAlignment(JTextField.LEFT);
		}
	    
		/*Positionieren der Elemente*/
	    Container c = frame.getContentPane();
	    c.setLayout( null );
	    
	    int lb_breite = 100;
	    int tf_breite = 100;
	    int tf_posy = 10;
	    
	    lb_name.setBounds	( 10, 10, lb_breite, 20);
	    lb_gewicht.setBounds( 10, 40, lb_breite, 20);
	    lb_hits.setBounds	( 10, 70, lb_breite, 20);
	    lb_food.setBounds	( 10,100, lb_breite, 20);
	    lb_resist.setBounds	( 10,130, lb_breite, 20);
	    lb_magic.setBounds	( 10,160, lb_breite, 20);
		
	    box_resist.setBounds(120,130, tf_breite, 20);
	    box_magic.setBounds	(120,160, tf_breite, 20);
	    
	    bt_erstell.setBounds(120,190, lb_breite, 20);
	    
	    for(int index = 0; index < 4; index++){
	    	tf[index].setBounds(lb_breite+20, tf_posy, tf_breite, 20);
	    	c.add(tf[index]);
	    	tf_posy = tf_posy + 30;
	    }
	    
	    /*Container füllen*/
	    c.add(lb_name); c.add(lb_gewicht); c.add(lb_hits); c.add(lb_food);
	    c.add(lb_resist); c.add(lb_magic); c.add(bt_erstell); c.add(box_magic);
	    c.add(box_resist);
	    
	    /*Fenster Eigenschaften*/
		frame.setSize(240, 245);
		frame.setVisible(true);
	}
	
	public static void main(String [] args)
	{
		/*Objekt Monster*/
		Monster monster = new Monster();
		check.init();
	}			
}

aber er meckert mir das check beim init() an mit "check cannot be resolved":confused:
was mach ich falsch?

Grüße
 
Nein was ich meine ist:

Java:
public class MonsterCheck {
//Das ist ein Felder der Klasse MonsterCheck
private JComboBox box_magic
 private void init(){
      //....... dein Code
     // .... alles was du im ActionListener brauchst, machst du so
    // dass du es einem Feld zuweist.
     box_magic = new JComboBox();
  }

   public static void main(String [] args){
        MonsterCheck monsterCheck = new MonsterCheck();
        check.init();
   }
}
[...]

Es muss auch so heiss wie du es vorher genannt hast, also
Java:
public class MonsterCheck {
//Das ist ein Felder der Klasse MonsterCheck
private JComboBox box_magic
 private void init(){
      //....... dein Code
     // .... alles was du im ActionListener brauchst, machst du so
    // dass du es einem Feld zuweist.
     box_magic = new JComboBox();
  }

   public static void main(String [] args){
        MonsterCheck monsterCheck = new MonsterCheck();
        monsterCheck .init();
   }
}
 
Etwas ist mir noch aufgefallen und zwar das du in der main das Objekt MonsterCheck erstellst und nicht Monster :confused: meine Klasse Monster
Code:
public class Monster 
{
	/*Eigenschaften*/
	private String name = "";
	private double gewicht;
	private long hitPoints;
	private int foodUsage;
	private String resistTyp;
	private boolean isMagicAttacker;

	/**
	 * Methode zum setzen des Namens
	 * @param monstername
	 */
	public void setName(String monstername){
		name = monstername;
	}
	
	
	/**
	 * Methode zur Ausgabe des Namens
	 * @return
	 */
	public String getName(){
		return name;
	}
	
	/**
	 * Methode zum setzen des Gewichts
	 * @param monstergewicht
	 */
	public void setGewicht(double monstergewicht){
		gewicht = monstergewicht;
	}
	
	
	/**
	 * Methode zur Ausgabe des Gewichts
	 * @return
	 */
	public double getGewicht(){
		return gewicht;
	}
	
	/**
	 * Methode zum setzen der Hit Points
	 * @param hits
	 */
	public void setHitPoints(long hits){
		hitPoints = hits;
	}
	
	
	/**
	 * Methode zur Ausgabe der Hit Points
	 * @return
	 */
	public long getHitPoints(){
		return hitPoints;
	}
	
	/**
	 * Methode zum setzen des FoodUsage
	 * @param food
	 */
	public void setFoodUsage(int food){
		foodUsage = food;
	}
	
	
	/**
	 * Methode zur Ausgabe des FoodUsage
	 * @return
	 */
	public int getFoodUsage(){
		return foodUsage;
	}
	
	/**
	 * Methode zum setzen des Resist Typs
	 * @param resist
	 */
	public void setResistTyp(String resist){
		resistTyp = resist;
	}
	
	
	/**
	 * Methode zur Ausgabe des ResistTyps
	 * @return
	 */
	public String getResistTyp(){
		return resistTyp;
	}
	
	/**
	 * Methode zum setzen der Magier-Eigenschaft
	 * @param bool
	 */
	public void setMagicAttacker(boolean bool){
		isMagicAttacker = bool;
	}
	
	
	/**
	 * Methode zur Ausgabe der Magier-Eigenschaft
	 * @return
	 */
	public boolean getMagicAttacker(){
		return isMagicAttacker;
	}	
	
	/*Konstruktor mit allen Eigenschaften als Parameter*/
	public Monster(String m_name, double m_weight, long m_hitPoints, int m_foodUsage, String m_resistTyp, boolean m_isMagicAttacker){
		setName(m_name);
		setGewicht(m_weight);
		setHitPoints(m_hitPoints);
		setFoodUsage(m_foodUsage);
		setResistTyp(m_resistTyp);
		setMagicAttacker(m_isMagicAttacker);
	}
	
	/*Konstruktor mit Name, resistTyp, weight und hitPoints als Parameter*/
	public Monster(String m_name, double m_weight, long m_hitPoints, String m_resistTyp){
		setName(m_name);
		setGewicht(m_weight);
		setHitPoints(m_hitPoints);
		setResistTyp(m_resistTyp);
	}
	
	/*Konstruktor mit Name als Parameter*/
	public Monster(String m_name){
		setName(m_name);
	}
	
	/*Leerer Konstruktor*/
	public Monster(){
	}
}
 

Neue Beiträge

Zurück