tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
9
ZUGRIFFE
762
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    myageagain myageagain ist offline Rookie
    Registriert seit
    Mar 2010
    Beiträge
    6
    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
     

  2. #2
    Kai008 Kai008 ist offline Mitglied Brillant
    Registriert seit
    May 2008
    Ort
    Brunn/Geb. (Niederösterreich)
    Beiträge
    944
    Blog-Einträge
    1
    Variablendeklarationen gehören unter der Klassendeklaration.
     
    Mein kleiner webstart Projektplaner:
    http://178.77.101.236/ppws/
    Ideen, Verbesserungsvorschläge, Bugsmeldungen und allg. Kritik erwünscht und erbeten.

    Danke. :)

  3. #3
    myageagain myageagain ist offline Rookie
    Registriert seit
    Mar 2010
    Beiträge
    6
    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
     

  4. #4
    Kai008 Kai008 ist offline Mitglied Brillant
    Registriert seit
    May 2008
    Ort
    Brunn/Geb. (Niederösterreich)
    Beiträge
    944
    Blog-Einträge
    1
    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)

    Code java:
    1
    2
    3
    
    public void setTemp(int newTemp) {
        temp = newTemp;
    }
     
    Mein kleiner webstart Projektplaner:
    http://178.77.101.236/ppws/
    Ideen, Verbesserungsvorschläge, Bugsmeldungen und allg. Kritik erwünscht und erbeten.

    Danke. :)

  5. #5
    myageagain myageagain ist offline Rookie
    Registriert seit
    Mar 2010
    Beiträge
    6
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    
    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
     

  6. #6
    Kai008 Kai008 ist offline Mitglied Brillant
    Registriert seit
    May 2008
    Ort
    Brunn/Geb. (Niederösterreich)
    Beiträge
    944
    Blog-Einträge
    1
    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:

    Code java:
    1
    2
    3
    4
    5
    6
    7
    
    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.
     
    Mein kleiner webstart Projektplaner:
    http://178.77.101.236/ppws/
    Ideen, Verbesserungsvorschläge, Bugsmeldungen und allg. Kritik erwünscht und erbeten.

    Danke. :)

  7. #7
    myageagain myageagain ist offline Rookie
    Registriert seit
    Mar 2010
    Beiträge
    6
    ja aber ich muss es doch in die Methode actionPerformed reinschreiben, weil es doch erst passieren soll nachdem der Radiobutton gedrückt wurde
     

  8. #8
    Kai008 Kai008 ist offline Mitglied Brillant
    Registriert seit
    May 2008
    Ort
    Brunn/Geb. (Niederösterreich)
    Beiträge
    944
    Blog-Einträge
    1
    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.

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    public class Name
    {
        int temp;
     
        public static void main(String[] args)
        {
            ...
        }
        ...
    }
     
    Mein kleiner webstart Projektplaner:
    http://178.77.101.236/ppws/
    Ideen, Verbesserungsvorschläge, Bugsmeldungen und allg. Kritik erwünscht und erbeten.

    Danke. :)

  9. #9
    myageagain myageagain ist offline Rookie
    Registriert seit
    Mar 2010
    Beiträge
    6
    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
     

  10. #10
    Kai008 Kai008 ist offline Mitglied Brillant
    Registriert seit
    May 2008
    Ort
    Brunn/Geb. (Niederösterreich)
    Beiträge
    944
    Blog-Einträge
    1
    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.
     
    Mein kleiner webstart Projektplaner:
    http://178.77.101.236/ppws/
    Ideen, Verbesserungsvorschläge, Bugsmeldungen und allg. Kritik erwünscht und erbeten.

    Danke. :)

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 25.11.10, 18:27
  2. Innerhalb einer Klasse eine Instanz einer anderen Klasse
    Von HackerNeo im Forum VisualStudio & MFC
    Antworten: 1
    Letzter Beitrag: 17.11.09, 13:08
  3. Klasse in einer anderen Klasse verwerden?
    Von MadCrusher im Forum PHP
    Antworten: 29
    Letzter Beitrag: 16.02.08, 04:26
  4. Variable in einer anderen Klasse lesen
    Von king_of_drums im Forum C/C++
    Antworten: 18
    Letzter Beitrag: 26.02.07, 15:00
  5. Antworten: 2
    Letzter Beitrag: 06.02.06, 19:57