Java Int variablen durch Actionevent ändern

xanatos1992

Newbie
Registriert
Sep. 2011
Beiträge
7
Hallo leute, ich hab da so ein Problem.
Also ich einen Zufallsgenerator geschrieben der mir auf Knopfdruck Zahlen zwischen x und y ausgibt. So aber ich will jetzt durch ein actionevent diese werte ändern. Also hab ich zwei textfelder gemacht das eine für x das andere für y diese sollen dann eingelesen werden als int geändert und dann in x und y gespeichert werden. Nur ich schaff es nicht mal den Wert der Variablen zu übermitteln nunja damit ihr auch sehen könnte wo denn der Fehler steckt hier mal der Quellcode:

Erste Klasse:
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import java.util.Random;
import java.util.Scanner;

  public class gui extends JFrame {
   // Anfang Variablen
   private JTextField ausgabe, eingabeo, eingabeu;
   private JButton quest, muni, caps, mons, boss, queg;
   private Panel knopf, text, ander;
   private JLabel ober, unter;
   private String qu;
   private int zufall, obrq;
   // Ende Variablen

   public gui () {
       // Frame-Initialisierung
      addWindowListener(new WindowAdapter() 
      {
        public void windowClosing (WindowEvent evt) {
       System.exit(0);
     }
     });
    setSize(500, 150);
    Container cp = getContentPane();
    cp.setLayout(new BorderLayout());

       // Anfang Komponenten
        
       //Buttons erstellen
       quest = new JButton("Quest EXP");
       muni = new JButton("Munition");
       caps = new JButton("Caps");
       mons = new JButton ("Monster EXP");
       boss = new JButton ("Boss EXP");
       queg = new JButton ("Quest Grenze ändern");
       
       //Panel für die änderung Buttons erstellen und einfügen
       
       ander = new Panel();
       ander.setLayout(new GridLayout(0,1));
       ander.add(queg);
       
       //Panel für die Generator Buttons ertselle
       knopf = new Panel();
       knopf.setLayout (new GridLayout(0,1));
       knopf.add(quest);
       knopf.add(mons);
       knopf.add(caps);
       knopf.add(muni);
       knopf.add(boss);
       
       //Buttons Listener hinzufügen
       caps.addActionListener(act);
       mons.addActionListener(act);
       quest.addActionListener(act);
       muni.addActionListener(act);
       boss.addActionListener(act);
       queg.addActionListener(act);
       
       ausgabe = new JTextField("");
       ausgabe.setEditable(false);
       cp.add(ausgabe,BorderLayout.CENTER);
       
       //Neue JLabel für die Textfelder erstellen
       ober = new JLabel ("Ober Grenze: ");
       unter = new JLabel ("Unter Grenze: ");
       
       //Neue Textfelder erstellen
       eingabeo = new JTextField("");
       eingabeu = new JTextField("");
       
       //Textfelder und JLabel dem Panel text hinzufügen
       text = new Panel();
       text.setLayout (new GridLayout(0,2));
       text.add(ober);
       text.add(eingabeo);
       text.add(unter);
       text.add(eingabeu);
       
       //Panels dem container hinzufügen
       cp.add(text,BorderLayout.SOUTH);
       cp.add(knopf,BorderLayout.WEST);
       cp.add(ander,BorderLayout.EAST);
           

       // Ende Komponenten

    setVisible(true);
  }   
  
   // Anfang Ereignisprozeduren
     ActionListener act = new ActionListener() 
    {
      public void actionPerformed( ActionEvent e ) 
      {
          Object obj = e.getSource();
          Oberq oberq = new Oberq();
          obrq = oberq.getInt();
          Unterq untq = new Unterq (50);
          
          if (obj == caps) {
          zufall = (int)(Math.random() * ((100 - 0)  + 1)  + 0);
          String aus = String.valueOf(zufall);
          ausgabe.setText("Die Caps betragen: " + aus);
        }
   

    
        if ( obj == muni)
        {
          zufall = (int)(Math.random() * ((35 - 0)  + 1)  + 0);
          String aus = String.valueOf(zufall);
          ausgabe.setText("Die Munition beträgt: " + aus);
        }     
      
        {
         // string g = eingabeo.getText();
          //int x = ParseI
          //int obrq = Oberq.changeOberq();
        }
        
        if (obj == quest) 
        {
          zufall = (int)(Math.random() * ((500 - 50)  + 1)  + 50);
          String aus = String.valueOf(zufall);
          ausgabe.setText("Die Quest Exp betragen: " + aus);
        }
        
        if ( obj == boss)
       {
          zufall = (int)(Math.random() * ((100 - 5)  + 1)  + 5);
          String aus = String.valueOf(zufall);
          ausgabe.setText("Die Boss Exp betragen: " + aus);
        }
       
    
     
    
       if (obj == mons) 
       {
          zufall = (int)(Math.random() * ((30 - 5)  + 1)  + 5);
          String aus = String.valueOf(zufall);
          ausgabe.setText("Die Monster Exp betragen: " + aus);
        }
     }
    };     
     // Ende Ereignisprozeduren
}

Zweite Klasse:
Code:
 class Oberq
  {
    private int i;
  
    public Oberq( int i )
    {
    this.i = 500;
    }
  
    public Oberq()
    {
    }
  
    public void setInt( int integer )
    {
    i = integer;
    }
  
    public int getInt()
    {
    return i;
    }
  }

Main Klasse:
Code:
  public class Wurf {
   public static void main (String[] args) {
   gui gui=new gui();
   }
 }

Falls es noch wichtig ist ich Arbeite mit Bluej.

Ich hoffe mal das mit irgendjemand helfen kann. So nebenbei ich bin jetzt kein Oberpro in Java haben damit erst gerade in der Schule angefangen, aber da mit die Klasse zu langsam Arbeitet mach ich mir immer eigene Projekte.

mfg
Kevin
 
Zuletzt bearbeitet:
Ist doch schon nicht schlecht, es fehlen doch nur 2 Zeilen?

Code:
 if (obj == quest) 
        {
          zufall = (int)(Math.random() * ((500 - 50)  + 1)  + 50);
[B]          if (zufall>Integer.parseInt(eingabeo.getText())) { zufall = Integer.parseInt(eingabeo.getText());}
          if (zufall<Integer.parseInt(eingabeu.getText())) { zufall = Integer.parseInt(eingabeu.getText());}[/B]
          String aus = String.valueOf(zufall);
          ausgabe.setText("Die Quest Exp betragen: " + aus);
        }

Wenn es größer ist, als die obere Grenze, wird eben die obere Grenze verwendet.
Wenn es kleiner ist, als die untere Grenze, die untere.

Deine Klasse gui solltest du groß schreiben, Java Klassen fangen immer mit Großbuchstaben an. Ansonsten bist du doch schon auf einem guten Weg. Immer weiter so.
 
Würde das die Grenze von 500 auf sagen wir mal 200 runter setzen :O .
Aber ich will ja das ich nicht jedes mal dies eingeben muss sondern ich gib das einmal ein. Drück dann auch Quest Grenze ändern button und die Grenze bleibt dann so egal was im Textfeld steht. Hoffe du weißt wie ich das mein.
 
Bzw, hier ausführlicher, dein Button für "Grenze setzen" hatte ja noch gar keine Funktion.
Das geht dann so, dass du es nicht immer wieder ändern musst.

Code:
if (obj == quest) 
        {
          zufall = (int)(Math.random() * ((500 - 50)  + 1)  + 50);
          [B]try {
        	  if (zufall>Integer.parseInt(eingabeo.getText())) { zufall = Integer.parseInt(eingabeo.getText());}
        	  if (zufall<Integer.parseInt(eingabeu.getText())) { zufall = Integer.parseInt(eingabeu.getText());}
        	  }
          catch(Exception ex){ /* Das Feld war leer! Es fliegt eine Nullpointer Exception, die hier nicht weiter behandelt werden soll*/}[/B]
          String aus = String.valueOf(zufall);
          ausgabe.setText("Die Quest Exp betragen: " + aus);
        }
        
        [B]if (obj == queg) 
        {
        	try {
        		if (zufall>Integer.parseInt(eingabeo.getText())) { zufall = Integer.parseInt(eingabeo.getText());}
        		if (zufall<Integer.parseInt(eingabeu.getText())) { zufall = Integer.parseInt(eingabeu.getText());}
        		}
        	catch(Exception ex){ /* Das Feld war leer! Es fliegt eine Nullpointer Exception, die hier nicht weiter behandelt werden soll*/}
          String aus = String.valueOf(zufall);
          ausgabe.setText("Die Quest Exp betragen: " + aus);
          
        }[/B]
 
Also Gut ich hab das mal ausprobiert. Ob es denn ungefähr das macht was ich wollte. Aber wenn ich zb das mit 200 machen dann kommt öfters 200. Also ersetzt er einfach den Wert der eigentlich Ausgegeben wird durch 200. Das wollte ich aber nicht^^. Ich wollte die 500 durch eine variable ersetzten. So diese variable enthält natürlich den Integer Wert. Der soll zubeginn 500 sein. So wenn ich dann den änderungs Button drücke soll er die variable ändern und den Integer aus dem textfeld einsetzten.
 
Sorry aber, das Problem ist so trivial, dass ich nicht verstehe, dass du das nicht hinbekommst.
Statt 500 führst du eben eine lokale Variable ein. Wo ist denn das Problem?

Bin leider nicht mehr am Computer (nur Netbook), kann es also nicht mehr machen.
 
Meinst das so:

Code:
public void actionPerformed( ActionEvent e ) 
      {
          Object obj = e.getSource();
          int oberq = 500;
          int unterq = 50;

if (obj == quest) 
        {
          zufall = (int)(Math.random() * ((oberq - unterq)  + 1)  + 50);
          String aus = String.valueOf(zufall);
          ausgabe.setText("Die Quest Exp betragen: " + aus);
        }

if (obj == queg)
        {
          String g = eingabeo.getText();
          oberq = Integer.parseInt(g);
          String t = eingabeu.getText();
          unterq = Integer.parseInt(t);
        }
Aber so kann ich sie nicht ändern. Die Lösung ist bestimmt so einfach nur ich komm da nicht drauf.
 
Ja, wobei ich die Variablen lokal zur Klasse gemacht hätte, ich würde sie also noch weiter nach oben ziehen und private machen. Wo die anderen private Variablen auch stehen, ist aber nicht so wichtig.

Dann musst du doch nur noch einbauen, dass beim Knopfdruck die Variable gesetzt wird:
Code:
 if (obj == queg) 
        {
        	try {
        		oberq = Integer.parseInt(eingabeo.getText()) ;
        		unterq =Integer.parseInt(eingabeu.getText()) ;
        		}
        	catch(Exception ex){ /* Das Feld war leer! Es fliegt eine Nullpointer Exception, die hier nicht weiter behandelt werden soll*/}
         
        }

Ich versteh echt nicht, wo das Problem ist.
 
Okay jetzt geht das :O.
Ich mein ja die Lösung ist bestimmt so einfach das ich nicht drauf komme.
Nur ich hatte das noch nie gemacht, also mit integer Variablen Arbeiten und sie ändern.
War eben halt mein erstes Projekt was ein wenig Komplezierter ist.

Aber danke für deine Geduld :).
 
Zurück
Oben