Frame öffnen klappt nicht?!

KingEldarion

Bekanntes Mitglied
So ich habe die Stadt.java:

Java:
import javax.swing.*;
import java.awt.event.*;

public class Stadt extends JFrame implements ActionListener
{	
	
	int einwohner = 310000;
	int einheiten = 5;
	boolean spieler = false; //true=Spieler false=bot!
	
	
	String einheitentext = "Einheiten:" + einheiten;
	String labeltext = "Einwohner:" + einwohner;
	
	
	//Hintergrundbild
	JLabel labBild = new JLabel("Version: Alpha 1.0.0");
			
	//Menu
	JButton rek = new JButton("Soldaten rekrutieren");
	JButton att = new JButton("Angreifen");
	JButton map = new JButton("Zurück");
	JLabel labEinwohner = new JLabel(labeltext);
	JLabel labEinheiten = new JLabel(einheitentext);
	
	
	public Stadt()
	{
		
		setTitle("Crusade of Future");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		map.addActionListener(this);
		rek.addActionListener(this);
		att.addActionListener(this);
		
		add(labEinwohner);
		add(labEinheiten);
		
		if(spieler == true){
			add(rek);
		}
		else
		{
			add(att);
		}
		
		
	}
	
	public void actionPerformed(ActionEvent evt) {
		if (evt.getActionCommand().equals("Soldaten rekrutieren")){
				
		    }		
	}
	
	Stadt besitzer(boolean b)
	{
		spieler = b;
		return null;
		
	}
	
	void Frame(){
		Stadt frame = new Stadt();
		frame.setSize(1000, 500);
		frame.setResizable(false);
		frame.setVisible(true);
		
	}
	    
	
	static Stadt Brest = new Stadt().besitzer(true);
	static Stadt Paris = new Stadt();
	static Stadt Caen = new Stadt();
	static Stadt Rennes = new Stadt();
	static Stadt Nantes = new Stadt();
	static Stadt LeMans = new Stadt();
	static Stadt Bordeaux = new Stadt();
	static Stadt Toulouse = new Stadt();
	static Stadt Montpellier = new Stadt();
	static Stadt Marseille = new Stadt();
	static Stadt Lyon = new Stadt();
	static Stadt Dijon = new Stadt();
	static Stadt Limoges = new Stadt();
	
	
	
	
}

Nun möchte ich die einzelnen Städte durch einen JButton aus der Map.java öffnen lassen.

Ich habe folgendes versucht:

Einmal das:
Java:
public void actionPerformed(ActionEvent evt) {
		if (evt.getActionCommand().equals("Brest")){
			
			Stadt.Brest.Frame();
		}
		
	}

und einmal das:

Java:
public void actionPerformed(ActionEvent evt) {
		if (evt.getActionCommand().equals("Brest")){
			
Stadt.Brest.setSize(1000, 500);
Stadt.Brest.setResizable(false);
Stadt.Brest.setVisible(true);

		}
		
	}

Beides funktioniert nicht. Ich habe sonst alles gemacht, den Button dem ActionListener hinzugefügt etc.

Wie kann ich es sonst machen?

Übrigens zeigt eclipse mir folgende Fehlermeldung an:

Code:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at Map.actionPerformed(Map.java:62)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$000(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
 
Zuletzt bearbeitet:
Was ist daran so unverständlich was ich versucht habe?!:

Ich habe folgendes versucht:

Einmal das:
Java:
public void actionPerformed(ActionEvent evt) {
		if (evt.getActionCommand().equals("Brest")){
			
			Stadt.Brest.Frame();
		}
		
	}

und einmal das:

Java:
public void actionPerformed(ActionEvent evt) {
		if (evt.getActionCommand().equals("Brest")){
			
Stadt.Brest.setSize(1000, 500);
Stadt.Brest.setResizable(false);
Stadt.Brest.setVisible(true);

		}
		
	}

Beides funktioniert nicht. Ich habe sonst alles gemacht, den Button dem ActionListener hinzugefügt etc.

Das sind meine beiden Versuche...
 
Was ist daran so unverständlich was ich versucht habe?!

Hmm, mir ist noch nicht so ganz klar, was du da überhaupt vorhast. Es sieht alles ein bisschen durcheinander und verwirrend aus. Was soll denn bei den Städten angezeigt werden? Normalerweise hat man einen JFrame in der Anwendung. Und darin kannst du dann deine verschiedenen Städte anzeigen lassen. Vielleicht kannst du mal grob beschreiben, was deine Anwendung denn machen soll.
 
Also ich habe die Stadt.java, dass ist halt eine Vorlage für alle Städte also wie sie aussehen sollen.
Jeder der unten erstellten Städte ist also ein Typ vom Objekt Stadt oder nicht?

Und da das Objekt Stadt ein JFrame ist, sollte wenn ich diese Methoden ausführe sich doch der JFrame öffnen!

Das tut er aber nicht.
 
Du willst für jede Stadt einen Frame öffnen? Was soll denn in diesen Frames dargestellt werden? Vielleicht solltest du dir erst nochmal Gedanken über die allgemeine Struktur der Anwendung machen.
 
Nein muss ich nicht.

Ich will ja nicht alle Städte gleichzeitig öffnen, sondern je nachdem wie ich sie brauche!
Daher will ich erstmal nur wissen wie ich die Stadt Brest öffne!

MfG KingEldarion
 
Dann würde ich trotzdem das Ganze anders strukturieren. Also nur 1 JFrame für die Anwendung nehmen und je nachdem, was bei den Städten angezeigt werden soll, dies dann inerhalb von dem JFrame anzeigen. Und dann irgendwo (Menü, Toolbar, JComboBox....) die Möglichkeit anbieten, einen Stadt auszuwählen. Was soll denn bei den Städten angezeigt werden?
 
@Camino
Darum geht es nicht.
Meine Frage war, warum ich den JFrame nicht ausführen kann, nicht wie ich es besser programmieren kann.

Ich meine ich finde gut das du anderen zeigst wie du es machst, aber du solltest dich vllt. mehr auf die Fragen der jeweiligen Leute beziehen und nachdem die Frage beantwortet wurde, zeigen wie du es machen würdest!

Also ich hätte jetzt gerne eine Antwort auf meine Frage...😉
 
Na ja, ich hab dich jetzt schon dreimal gefragt, was du bei deinen Städten denn überhaupt angezeigt haben willst. Keine Antwort darauf. Dann hab ich dir gesagt, dass dein jetziger Ansatz komplett falsch und Murks ist. Du bist so ziemlich auf dem falschen Weg. So kann man dir leider nicht weiter helfen. Ich klinke mich jetzt hier aus...
 
Naja, wenn ich jemanden mit nen paar Pappflügeln auf ne Schlucht zu rennen sehe, dann würde ich ihn auch dezent drauf aufmerksam machen, dass das so nicht unbedingt gut geht 😉

Dein Problem ist immernoch die Fehlermeldung oben?
Dann ist etwas in der Klasse Map in Zeile 62 null.
 
Du hast x Städte, und willst immer nur eine Stadt anzeigen. Dann brauchst du nicht x Frames, sondern nur einen.
Das ganze dann noch schön aufgebaut nach MVC und alles ist prima 😉
 
Deine Städte sind alle JFrames, die du öffnen und angezeigt haben willst. Ich würde erst mal nur 1 JFrame für die Anwendung machen und dann die Klasse Stadt so umschreiben, dass ich sie in diesem Frame angezeigt bekommen kann. Was auch immer da angezeigt werden soll. Hab ich aber nun schon mehrmals geschreiben. Und was die Klasse Map sein soll, weiss ich auch nicht.
 
Also sozusagen, Stadt ist kein Frame sondern eine normale Class, die dann die Stadt-variablen besitzt.
Dann einen JFrame, der dann die jeweiligen Variablen der Städte ausgibt?

Also die Klasse Map ist ein JFrame mit mehreren JButtons, jeder dieser JButtons wird eine der Städte öffnen, bzw. einer geht zurück ins Hauptmenü...
 
Also die Klasse Map ist ein JFrame mit mehreren JButtons, jeder dieser JButtons wird eine der Städte öffnen, bzw. einer geht zurück ins Hauptmenü...
Das könntest du dann besser als Menü in deinem Hauptframe anlegen, oder als Auswahl (JComboBox) in deinem JFrame oberhalb des Panels, wo die Städte angezeigt werden. So kannst du dann in der ComboBox auswählen, welche Stadt angezeigt werden soll und dann wird die in dem Bereich in dem JFrame angezeigt.
 
Mal schauen, ich wollte aber auf jeden Fall noch die Buttons zu den Städten auf eine bestimmte Position setzen, so dass sie auf einer Grafik die Frankreich zeigt, an der richtigen Stelle liegen...
 
Hm, so langsam erschliesst sich mir, was du überhaupt vorhast. Du hast eine Karte von Frankreich, und willst dann durch Klick auf die Städte die Infos zu der Stadt angezeigt bekommen?
 
Fast eigentlich soll das ein Spiel werden.

Ein JButton soll dann eine Kampf.java ausführen.
Die Stadt gehört dann dem jeweils anderen.
Vorausgesetzt er gewinnt die Schlacht...

Und der Kampf dreht sich um Frankreich...
 
Dann wirst du nicht drum herumkommen, deine Anwendung nach MVC umzustrukturieren, also trennen nach Daten (Model) und grafischen Elementen (View), sowie einem Controller oder einer Spielengine. Wenn du dann eine Aktion ausführen möchtest, machst du das über den Controller, der dann evtl. die Daten (das Model) manipuliert und das Model automatisch die View aktualisiert.
 
Ich habs jetzt so ausprobiert:

Stadtviewer.java:

Java:
import javax.swing.*;

import java.awt.event.*;


public class Stadtviewer extends JFrame implements ActionListener{

	int ID;
	
	int einheiten;
	int einwohner;
	boolean spieler;
	
	String Name;
	
	
	 void view(int i){
		ID = i;
	
		if(ID == 1){
			Name = "Brest";
			einwohner = Stadt.Brest.einwohner;
			einheiten = Stadt.Brest.einheiten;
			spieler = Stadt.Brest.spieler;
		}
		
		if(ID == 2){
			Name = "Paris";
			einwohner = Stadt.Paris.einwohner;
			einheiten = Stadt.Paris.einheiten;
			spieler = Stadt.Paris.spieler;
		}
		
		if(ID == 3){
			Name = "Caen";
			einwohner = Stadt.Caen.einwohner;
			einheiten = Stadt.Caen.einheiten;
			spieler = Stadt.Caen.spieler;
		}
		
		if(ID == 4){
			Name = "Rennes";
			einwohner = Stadt.Rennes.einwohner;
			einheiten = Stadt.Rennes.einheiten;
			spieler = Stadt.Rennes.spieler;
		}
		
		if(ID == 5){
			Name = "Nantes";
			einwohner = Stadt.Nantes.einwohner;
			einheiten = Stadt.Nantes.einheiten;
			spieler = Stadt.Nantes.spieler;
		}
		
		if(ID == 6){
			Name = "LeMans";
			einwohner = Stadt.LeMans.einwohner;
			einheiten = Stadt.LeMans.einheiten;
			spieler = Stadt.LeMans.spieler;
		}
		
		if(ID == 7){
			Name = "Bordeaux";
			einwohner = Stadt.Bordeaux.einwohner;
			einheiten = Stadt.Bordeaux.einheiten;
			spieler = Stadt.Bordeaux.spieler;
		}
		
		if(ID == 8){
			Name = "Toulouse";
			einwohner = Stadt.Toulouse.einwohner;
			einheiten = Stadt.Toulouse.einheiten;
			spieler = Stadt.Toulouse.spieler;
		}
		
		if(ID == 9){
			Name = "Montpellier";
			einwohner = Stadt.Montpellier.einwohner;
			einheiten = Stadt.Montpellier.einheiten;
			spieler = Stadt.Montpellier.spieler;
		}
		
		if(ID == 10){
			Name = "Marseille";
			einwohner = Stadt.Marseille.einwohner;
			einheiten = Stadt.Marseille.einheiten;
			spieler = Stadt.Marseille.spieler;
		}
		
		if(ID == 11){
			Name = "Lyon";
			einwohner = Stadt.Lyon.einwohner;
			einheiten = Stadt.Lyon.einheiten;
			spieler = Stadt.Lyon.spieler;
		}
		
		if(ID == 12){
			Name = "Dijon";
			einwohner = Stadt.Dijon.einwohner;
			einheiten = Stadt.Dijon.einheiten;
			spieler = Stadt.Dijon.spieler;
		}
		
		if(ID == 13){
			Name = "Limoges";
			einwohner = Stadt.Limoges.einwohner;
			einheiten = Stadt.Limoges.einheiten;
			spieler = Stadt.Limoges.spieler;
			
			
		}
		

	}
	 
	 public Stadtviewer(){
			setTitle("Crusade of Future");
			setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			setLayout(null);
			
			JLabel labName = new JLabel("Stadt:" + Name); 
			JLabel labEinwohner = new JLabel("Einwohner:" + einwohner);
			JLabel labEinheiten = new JLabel("Einheiten:" + einheiten);
			
			labName.setBounds(30, 30, 150, 25);
			labEinwohner.setBounds(30, 55, 150, 25);
			labEinheiten.setBounds(30, 80, 150, 25);
			
			
			
			add(labName);
			add(labEinwohner);
			add(labEinheiten);
			
		}
	
	
	
	
	public void actionPerformed(ActionEvent evt) {
		
		
	}
}


Und meine Stadt.java
Java:
public class Stadt
{
	int einwohner = 310000;
	int einheiten = 5;
	boolean spieler = false; //true=Spieler false=bot!
	
	
	static Stadt Brest = new Stadt();
	static Stadt Paris = new Stadt();
	static Stadt Caen = new Stadt();
	static Stadt Rennes = new Stadt();
	static Stadt Nantes = new Stadt();
	static Stadt LeMans = new Stadt();
	static Stadt Bordeaux = new Stadt();
	static Stadt Toulouse = new Stadt();
	static Stadt Montpellier = new Stadt();
	static Stadt Marseille = new Stadt();
	static Stadt Lyon = new Stadt();
	static Stadt Dijon = new Stadt();
	static Stadt Limoges = new Stadt();
	
	
	static void einsetzen(){
		
		Brest.spieler = true;
		Brest.einwohner = 5000;
		Brest.einheiten = 100;
	}
}

Das Problem dabei ist das alle Werte die ich ausgeben will also einheiten, einwohner und spieler alle als null angezeigt werden, starten tuh ich den Frame von der Map.java und die Methode einsetzen in der Stadt.java wird übrigens beim starten des Programmes ausgeführt...
 
Ich würde die Klasse Stadt viel allgemeiner anlegen, mit den notwendigen Feldern, wie z.B. Stadtname, Einwohner, Einheiten usw., alle als private deklariert und mit setter- und getter-Methoden versehen. Vielleicht auch noch einen leeren und einen Konstruktor mit Parametern. Und dann in einer Datenklasse oder im Stadtviewer die konkreten Städte als Objekte anlegen.
 
Seh ich das richtig das getter und setter sozusagen nur Methoden sind, bzw. die getter nur methoden mit return-wert?

EDIT:

Habs geschafft habe jetzt einfach die Variablen mit einer return-Methode initialisiert.
 
Zuletzt bearbeitet:
Seh ich das richtig das getter und setter sozusagen nur Methoden sind, bzw. die getter nur methoden mit return-wert?

Ja, mit diesen beiden Methoden kannst du die Variablen (die normalerweise auf private gesetzt sind) entweder mit einem Wert füllen (set...) oder auslesen (get...).
Ich würde auch nicht mit diesen vielen static arbeiten, sondern eher irgendwo am Anfang Objekte dieser Städte anlegen (initialisieren) und in einer Collection (z.B. ArrayList) sammeln.
 
So ich habe es jetzt ganz einfach mitnem "getter" gemacht, dass Problem ist, dass ich die Variablen natürlich auch ändern möchte, Problem dabei ist, wenn ich eine der Variablen durch:

Stadt.Brest.einwohner = 5000;

zum Beispiel ändern will, dann sind plötzlich alle Variablen der Klasse Stadt null?

Warum?
 
So ich habe es jetzt ganz einfach mitnem "getter" gemacht, dass Problem ist, dass ich die Variablen natürlich auch ändern möchte, Problem dabei ist, wenn ich eine der Variablen durch:

Stadt.Brest.einwohner = 5000;

zum Beispiel ändern will, dann sind plötzlich alle Variablen der Klasse Stadt null?

Warum?

Wie soll denn jemand wissen, warum? Diese eine Codezeile ist nur sehr wenig bis garnicht aussagekräftig. Hast du denn den Vorschlag umgesetzt und dir eine Klasse Stadt mit Variablen und getter- und setter-Methoden angelegt? Oder ist alles immer noch so wie vorher, mit den ganzen static Städten?
 
Du müsstest mindstens mal zeigen, wie deine Klasse Stadt nun ausssieht und wie du die Objekte (=Städte) erstellst bzw. wie du darauf zugreifst, um die Variablen zu ändern.
 
Viel verändert habe ich nicht:

Stadt.java:
Java:
import javax.swing.JLabel;

public class Stadt
{	
	int einwohner = 100;
	int einheiten = 5;
	boolean spieler = false; //true=Spieler false=bot!
	String Name = "Brest";
	
	static int ID = OU.ID;
		
	static Stadt Brest = new Stadt();
	static Stadt Paris = new Stadt();
	static Stadt Caen = new Stadt();
	static Stadt Rennes = new Stadt();
	static Stadt Nantes = new Stadt();
	static Stadt LeMans = new Stadt();
	static Stadt Bordeaux = new Stadt();
	static Stadt Toulouse = new Stadt();
	static Stadt Montpellier = new Stadt();
	static Stadt Marseille = new Stadt();
	static Stadt Lyon = new Stadt();
	static Stadt Dijon = new Stadt();
	static Stadt Limoges = new Stadt();

	
	
	
	
	//Rückgabemethoden für den Stadtviewer
	
	static int BackEinwohner(){
		
		int Einwohnerreturn = 0;
		
		if(ID == 1){
			Einwohnerreturn = Brest.einwohner;
		}
		
		if(ID == 2){
			Einwohnerreturn = Paris.einwohner;
		}
		
		if(ID == 3){
			Einwohnerreturn = Caen.einwohner;
		}
		
		if(ID == 4){
			Einwohnerreturn = Rennes.einwohner;
		}
		
		if(ID == 5){
			Einwohnerreturn = Nantes.einwohner;
		}
		
		if(ID == 6){
			Einwohnerreturn = LeMans.einwohner;
		}
		
		if(ID == 7){
			Einwohnerreturn = Bordeaux.einwohner;
		}
		
		if(ID == 8){
			Einwohnerreturn = Toulouse.einwohner;
		}
		
		if(ID == 9){
			Einwohnerreturn = Montpellier.einwohner;
		}
		
		if(ID == 10){
			Einwohnerreturn = Marseille.einwohner;
		}
		
		if(ID == 11){
			Einwohnerreturn = Lyon.einwohner;
		}
		
		if(ID == 12){
			Einwohnerreturn = Dijon.einwohner;
		}
		
		if(ID == 13){
			Einwohnerreturn = Limoges.einwohner;
		}
		
		return Einwohnerreturn;
	}
	
	
	
	static int BackEinheiten(){
		
		int Einheitenreturn = 0;
	
	if(ID == 1){
		Einheitenreturn = Brest.einheiten;
	}

	if(ID == 2){
		Einheitenreturn = Paris.einheiten;
	}

	if(ID == 3){
		Einheitenreturn = Caen.einheiten;
	}

	if(ID == 4){
		Einheitenreturn = Rennes.einheiten;
	}

	if(ID == 5){
		Einheitenreturn = Nantes.einheiten;
	}

	if(ID == 6){
		Einheitenreturn = LeMans.einheiten;
	}

	if(ID == 7){
		Einheitenreturn = Bordeaux.einheiten;
	}

	if(ID == 8){
		Einheitenreturn = Toulouse.einheiten;
	}

	if(ID == 9){
		Einheitenreturn = Montpellier.einheiten;
	}

	if(ID == 10){
		Einheitenreturn = Marseille.einheiten;
	}

	if(ID == 11){
		Einheitenreturn = Lyon.einheiten;
	}

	if(ID == 12){
		Einheitenreturn = Dijon.einheiten;
	}

	if(ID == 13){
		Einheitenreturn = Limoges.einheiten;
	}
	
		return Einheitenreturn;
		}

	
	
	static String BackName(){
		String Namereturn = "KA";
		
		
		
		if(ID == 1){
			Namereturn = Brest.Name;
		}

		if(ID == 2){
			Namereturn = Paris.Name;
		}

		if(ID == 3){
			Namereturn = Caen.Name;
		}

		if(ID == 4){
			Namereturn = Rennes.Name;
		}

		if(ID == 5){
			Namereturn = Nantes.Name;
		}

		if(ID == 6){
			Namereturn = LeMans.Name;
		}

		if(ID == 7){
			Namereturn = Bordeaux.Name;
		}

		if(ID == 8){
			Namereturn = Toulouse.Name;
		}

		if(ID == 9){
			Namereturn = Montpellier.Name;
		}

		if(ID == 10){
			Namereturn = Marseille.Name;
		}

		if(ID == 11){
			Namereturn = Lyon.Name;
		}

		if(ID == 12){
			Namereturn = Dijon.Name;
		}

		if(ID == 13){
			Namereturn = Limoges.Name;
		}
		
		return Namereturn;
	}
	
	
	
	
	
}

Stadtviewer.java:

Java:
import javax.swing.*;

import java.awt.event.*;


public class Stadtviewer extends JFrame implements ActionListener{	
	JLabel labName;
	JLabel labEinwohner;
	JLabel labEinheiten;
	
	
	

	
	 
	 public Stadtviewer(){
			setTitle("Crusade of Future");
			setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			setLayout(null);
			
			 }
	
	void init(){
		int einheiten = Stadt.BackEinheiten();
		int einwohner = Stadt.BackEinwohner();
		boolean spieler = Stadt.Brest.spieler;
		String Name = Stadt.BackName();
		
		labName = new JLabel("Stadt: " + Name);
		labEinwohner = new JLabel("Einwohner: " + einwohner);
		labEinheiten = new JLabel("Einheiten: " + einheiten);
		
		labName.setBounds(30, 30, 150, 25);
		labEinwohner.setBounds(30, 55, 150, 25);
		labEinheiten.setBounds(30, 80, 150, 25);			
	
		
		add(labName);
		add(labEinwohner);
		add(labEinheiten);
	}
	
	
	
	
	public void actionPerformed(ActionEvent evt) {
		
		
	}
	
	
	
}

Eine Variable der Städte will ich so verändern:

Stadt.Brest.einwohner = 5000;

Das Problem ist momentan halt, dass wenn ich die Variablen durch den obigen Code initialisieren möchte, sind alle Stadtvariablen also auch wenn ich nur die Einwohner-variable von Brest ändere, sind auch alle anderen Städte und Variablen null, also z.B. der Name von Paris ebenfalls null...

Warum? Wenn ich die Codezeile nicht habe, dann wird alles richtig angezeigt, Name, Einwohner, Einheiten...
 
Hmmm, das sieht alles ziemlich seltsam aus, die ganzen if-Abfragen lassen sich z.B. mit switch eleganter lösen, und das mit den vielen static sieht nicht so toll aus.

Ich dachte bei der Klasse Stadt eigentlich eher an so etwas:
Java:
public class Stadt {
	
	private String name;
	private int einwohner;
	private int einheiten;
	
	
	// leerer Konstruktor
	public Stadt() {
	
	}
	
	// Konstruktor mit Parameter
	public Stadt(String name, int einwohner, int einheiten) {
		
		this.name = name;
		this.einwohner = einwohner;
		this.einheiten = einheiten;
		
	}

	
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getEinwohner() {
		return einwohner;
	}

	public void setEinwohner(int einwohner) {
		this.einwohner = einwohner;
	}

	public int getEinheiten() {
		return einheiten;
	}

	public void setEinheiten(int einheiten) {
		this.einheiten = einheiten;
	}

}

Jetzt nur mal vereinfacht mit den Feldern für Name, Einwohneranzahl und Einheiten der Stadt. Es gibt 2 Konstruktoren, einmal leer (die Variablen werden nicht gefüllt) und einen mit Parameter, also man übergibt beim Erstellen einer neuen Stadt die Werte dem Konstruktor, z.B.:

Java:
Stadt brest = new Stadt("Brest", 200000, 40000);

So kannst du Objekte der Klasse Stadt erstellen. Die Werte ändern kannst du mit den setter-Methoden, z.B.:

Java:
brest.setEinheiten(50000);

Und auslesen kannst du die Werte mit den getter-Methoden:

Java:
int einheitenInBrest = brest.getEinheiten();

So kannst du dir mehrere Objekte von Städten anlegen und deren Werte verändern oder auslesen. Du könntest z.B. in deiner Klasse Stadtviewer in einer init-Methode erstmal alle gewünschten Städte anlegen.

Ansonsten schreibt man Variablen-Namen klein, also anstatt
Code:
String Name = "Brest";
oder
Code:
int Einwohnerreturn = 0;
heisst es
Code:
String name = "Brest";
oder [c]int einwohnerreturn = 0;[/code]
 

Neue Themen


Zurück
Oben