variable einer anderen klasse umschreiben ?

myageagain

Grünschnabel
Hi, hallo ich bin wirklich nicht sonderlich gut mit Java, deswegen glaube ich mein Problem ist recht einfach,

Mein Problem:
Ich habe2 Klassen eine hauptklasse Spiel, und eine Zweite Klasse siehe Quote.
Nun will ich das wenn ein Knopf "zweiButton" gedrückt wird, der wert von temp auf =2 gesetzt wird

Mir sagt mein Programm aber immer das es die variable temp nicht findet...obwohl diese eindeutig in Spiel.temp ist.
int temp=0;

JRadioButton zweiButton = new JRadioButton("2");

class ButtonListener implements ActionListener {
Integer wert;
public ButtonListener(Integer wert) {
this.wert = wert;
}
public void actionPerformed(ActionEvent e){
** And diese stelle muesste etwas wie "temp = wert"
}
}
...
zweiButton.addActionListener(new ButtonListener(2));

Ich wäre euch wirklich sehr dankbar wenn mir jemand helfen kann
 
ja also über dem "int temp = 0" kommt noch die deklaration von der Klasse Spiel, aber die ist recht groß ich wollt jetzt nich den ganzen code posten
 
Ach so.
Du hättest nen Java-Tag neben den Code noch für die ganze Klasse verwenden können, dabei hat er die Größe von ich glaube 15 - 20 Zeilen, und zeigt nen ScrollBalken an.
Solltest du sowieso machen, ein direkter Zugriff von einer inneren Klasse sollte möglich sein. Man verwendet idR. aber keinen direkten Zugriff aus anderen Klassen, sondern Methoden, die "Setter" genannt werden. (Von Set = Setzen)

Java:
public void setTemp(int newTemp) {
	temp = newTemp;
}
 
Code:
import java.util.Random;
import java.util.Scanner;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;


public class Monopoly {

    public static void main(String[] args)
    {
        Scanner in = new Scanner(System.in);
        int input;
        
        Spieler Teilnehmer[] = new Spieler[9];
        Feld Felder[] = new Feld[40];
        Karte[] stapel_ereignis = new Karte[16];
        Karte[] stapel_gemeinschaft = new Karte[16];
        stapel_ereignis[0] = new Karte ("Ereignis", 1, "Betrunken im Dienst. Strafe 400 Euro.", -400);
[..]noch 100 karten mehr[...]
JFrame Spieleranzahl = new JFrame("Anzahl der Spieler");
//erzeugt einen neuen Toplevel-Container.
Spieleranzahl.setSize(250,190);
//setzt die Groesse des Fensters auf 500*500 Pixel
Spieleranzahl.setDefaultCloseOperation
(JFrame.EXIT_ON_CLOSE);
//stellt die Operation ein, die beim Klicken auf das
// Schliess-Kreuz des Fensters geschehen soll,
//hier soll das gesamte Java-Programm beendet werden
 //nun ein Textfeld erstellen das etwas zu sagen hat
JLabel label1;
  label1 = new JLabel("Bitte Anzahl der Spieler auswählen:");
        //Label zentrieren
      label1.setHorizontalAlignment(JLabel.CENTER);
             label1.setVisible(true);
      // der Befehl sagt der Text soll Oben stehn
// das Layout ordnet die Knoepfe und den Text
Spieleranzahl.setLayout(new BorderLayout(5,5));
Spieleranzahl.add(BorderLayout.NORTH, label1);

//ein zwischenspeicher fuer die Anzahl. der Spieler
int temp=0;
//deklarieren der radiobutten
JRadioButton zweiButton = new JRadioButton("2");
//hier wird eine classe erstellt die die actionen abfaengt und eine action ausfuehrt
class ButtonListener implements ActionListener {
    Integer wert;
    public ButtonListener(Integer wert) {
            this.wert = wert;
     }
     public void actionPerformed(ActionEvent e){
                Monopoly.temp = wert; // <- das klappt nicht so ganz
     }

  }
// hier fuegt man jeden button zum Actionlistener mit seinem wert
 zweiButton.addActionListener(new ButtonListener(2));

ich bekomm leider immernoch fehlermeldungen :(
 
OMG.
Na ja, du hast die Variable in einer Methode stehen, Methodenvariablen sind nur in dieser sichtbar und gültiig.
Du musst sie außerhalb einer Methode deklarierien.

Außerdem schreibt man Variablenamen klein (Teilnehmer => teilnehmer) und CamelCase (stapel_ereignis => stapelEreignis).
Statt dem Arrays für die Karten könntest du dir auch mal die Klasse Stack anschauen, sie ordnet Variablen LIFO an.
Zudem könntest du versuchen die Karten nicht in der main zu instanzieren, sondern direkt in der Klasse Karte als Konstante, oder darin in inialisator eines Arrays:

Java:
public class Karte
{
	private static final Karte[] CARDS = { //Konstanten werden komplett in Uppercase geschrieben
		new Karte(Parameter),
		new Karte(Parameter),
	};
}

Frei aus dem Kopf heraus denke ich, dass es so um einiges übersichtlicher wird.
 
ja aber ich muss es doch in die Methode actionPerformed reinschreiben, weil es doch erst passieren soll nachdem der Radiobutton gedrückt wurde
 
Nein, du deklarierst die Variable in der main. Dadurch ist sie ungültig, sobald diese abgearbeitet wurde, lange bevor die Taste gedrückt wurdde. (Warscheinlich sogar noch, bevor du das JFrame siehst.)
Du musst die Variable über die main (bzw. halt außerhalb, aber über ist natürlich standart) schreiben, damit sie Gültig bleibt solange die Klasseninstanz es selbst ist.

Java:
public class Name
{
	int temp;

	public static void main(String[] args)
	{
		...
	}
	...
}
 
ok vielen dank das macht sinn,

aber wie änder ich diese nun den wert von temp mithilfe eines knopfdrucks ? mit der methode kann ich es ja nicht machen wenn die nicht variable außerhalb verändern kann
 
Kannst du, man tut es bloß nicht
Man deklariert Klassenvariablen als privat, damit nicht alles irgendwie nach belieben einen Wert reinschreiben kann. Auf private Variablen kann nur die eigene Klasse (verwechsel Klasse nicht mit Instanz) zugreifen. Damit auch eine innere Klasse. Die Methode sollte in Monopoly kommen, und einfach vom Listener aufgerufen werden.
 
Zurück