klassenübergreifende Variabeln?

also habe folgenden code:
Java:
package readfiles;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.StringTokenizer;
import javax.swing.JFileChooser;
import javax.swing.JFrame;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
/**
 *
 * @author tom
 */
public class ReadFiles {

    public ReadFiles() {
        readFile();
    }

    public void readFile() {


        JFileChooser chooser = new JFileChooser();

        int r = chooser.showOpenDialog(new JFrame());
        if (r == JFileChooser.APPROVE_OPTION) {
            String path = chooser.getSelectedFile().getPath();
            BufferedReader inputStream = null;
            try {
                inputStream = new BufferedReader(new FileReader(path));

                String l;
                while ((l = inputStream.readLine()) != null) {
                    String alleRadien =(l);                     
                    StringTokenizer werte = new StringTokenizer(alleRadien, "|");   
                    int radius1 = Integer.valueOf(werte.nextToken());
                    int radius2 = Integer.valueOf(werte.nextToken());
                    int radius3 = Integer.valueOf(werte.nextToken());

                    System.out.println(radius1);
                      System.out.println(radius2);
                       System.out.println(radius3);

                }
            } catch (IOException ex) {
                System.out.println("ERROR: File not found or access not possible: " + path);
            } finally {
                if (inputStream != null) {
                    try {
                        inputStream.close();
                    } catch (IOException ex) {
                        System.out.println("ERROR: File close failed for: " + path);

                    }

                }
            }
        }

    }

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                ReadFiles rf = new ReadFiles();
                rf.readFile();
            }
        });
    }
}

aber wie benutze ich die Variabeln: radius1, radius2 und radius 3 in einer anderen Klasse?
 

Sempah

Bekanntes Mitglied
z.B so über getter-Methoden:

Java:
public class ReadFiles {
	private int radius1;
	
	public void methode xy() {
		radius1 = 5;
	}
	
	public int getRadius1() {
		return radius1;
	}
}
 
ok das versteh ich nicht so ganz bin noch ein Anfänger :oops:

also in der Klasse zeichne.java

Java:
package readfiles;

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JApplet;

public class zeichne extends JApplet{

    
    @Override
	public void paint(Graphics g){
		Color myColor=new Color(83,139,252,20);
		g.setColor(myColor);


g.fillOval(1, 1, radius1, radius2);
	}

}

soll mit den radius1,radius2 Werten aus meiner Readfiles.java Klasse ein Kreis gezeichnet werden.
könnt ihr mir das nochmal schritt für schritt erklären?

Danke!
 

Final_Striker

Top Contributor
So kannst du in Klasse B auf Werte der Klasse A zugreifen:
Java:
public class A{
   int v;

   public void tuWas(){
      v = 5;
   }
   public int getV(){
      return v;
   }
}

public class B{
   public void zeichneWas(){
      A a = new A();
      a.tuWas();
      int wert = a.getV();   
   }
}
 

srea

Bekanntes Mitglied
die getter und setter Methoden musst du in ReadFiles schreiben. Um von zeichne dann darauf zugreifen zu können musst du auf ein Objekt von ReadFiles die (z.B.) .getRadius() Methode aufrufen.
Davor in ReadFiles noch radius1 etc. als Instanzvariable setzen (ganz oben unter der Klassendefinition).

Probier einfach ein wenig, bis es funktioniert, du kannst nur lernen.
 
Du definierst die Variablen in einer Klasse als static

zB: static double radius1, radius2, radius3;

und rufst sie in der anderen klasse mit dem Klassennamen Definitionsklasse - dann ein Punkt - und der Variablenname auf.

zB: Definitionsklasse.radius1

Den Klassennamen musst du natürlich anpassen:D
 
Das ganze sieht dann so aus:

Code:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.StringTokenizer;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
 
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
/**
 *
 * @author tom
 */
public class ReadFiles {
 
	static int radius1, radius2, radius3; 
	
    public ReadFiles() {
        readFile();
    }
 
    public void readFile() {
 
 
        JFileChooser chooser = new JFileChooser();
 
        int r = chooser.showOpenDialog(new JFrame());
        if (r == JFileChooser.APPROVE_OPTION) {
            String path = chooser.getSelectedFile().getPath();
            BufferedReader inputStream = null;
            try {
                inputStream = new BufferedReader(new FileReader(path));
 
                String l;
                while ((l = inputStream.readLine()) != null) {
                    String alleRadien =(l);                     
                    StringTokenizer werte = new StringTokenizer(alleRadien, "|");   
                    radius1 = Integer.valueOf(werte.nextToken());
                    radius2 = Integer.valueOf(werte.nextToken());
                    radius3 = Integer.valueOf(werte.nextToken());
 
                    System.out.println(radius1);
                      System.out.println(radius2);
                       System.out.println(radius3);
 
                }
            } catch (IOException ex) {
                System.out.println("ERROR: File not found or access not possible: " + path);
            } finally {
                if (inputStream != null) {
                    try {
                        inputStream.close();
                    } catch (IOException ex) {
                        System.out.println("ERROR: File close failed for: " + path);
 
                    }
 
                }
            }
        }
 
    }
 
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
 
            public void run() {
                ReadFiles rf = new ReadFiles();
                rf.readFile();
            }
        });
    }
}


und der Aufruf

Code:
public class showFiles { //nur ein Beispiel

int a;
...

a = ReadFiles.radius1      //einfach in einer Methode aufrufen // hier mal auf eine andere Var übergeben

...


Kleiner Tipp: wenn es sich wirklich um einen Radius handelt solltest du Fließkommawerte verwenden
 

kk236

Mitglied
ich würde es wie oben beschrieben mit getters und setters machen...
Java:
public class ReadFiles {
 
	static int radius1, radius2, radius3; 
	

    public double getRadius1
{
      return radius1;
}
}

das ganze wird dann in der main ähnlich aufgerufen z.B.

Java:
     int i =  ReadFiles.getRadius1();
so hoffe mal hab keinen fehler eingebaut...
 

Wortraum

Bekanntes Mitglied
Vielleicht habe ich etwas übersehen, aber so scheint mir die Deklaration mit static falsch; Objektvariablen haben niemals static. Außerdem fehlt der Modifikator private.
 
also ich jetzt am Ende
Java:
public void run() {
                ReadFiles rf = new ReadFiles();
                rf.readFile();
            }
        });

new Zeichne();
    }

}

new Zeichne(); erstellt und damit wird dann Zeichne aufgerufen...aber irgendwie funzt das net.

hier der Code und Fehler:
Java:
package readfiles;

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JApplet;

public class Zeichne extends JApplet{


 public  Zeichne() {
   Paint();
 }
 
                public void Paint(Graphics g){
		Color myColor=new Color(83,139,252,50);
		g.setColor(myColor);


g.fillOval(1, 1,(int)ReadFiles.radius1,(int)ReadFiles.radius2);
	}


    }

bei Paint(); sagt er "found: no arguments", "required java.awt.Graphics" und "method Pain in Class... cannot be applied to given types"

was sagt mir das?

und ich musste radius1 und co in int's machen aber in ReadFile sind es doubles?
 

BumBel

Mitglied
sollte daran liegen dass die Methode paint() kleingeschrieben wird.
Sie wird das erste mal automatisch ausgeführt, sprich du musst sie nich aufrufen.
Falls du sie jedoch zu nem späteren Zeitpunkt wieder aufrufen willst geht das mit repaint()
 

srea

Bekanntes Mitglied
also ich jetzt am Ende
Java:
public void run() {
                ReadFiles rf = new ReadFiles();
                rf.readFile();
            }
        });

new Zeichne();
    }

}

new Zeichne(); erstellt und damit wird dann Zeichne aufgerufen...aber irgendwie funzt das net.

hier der Code und Fehler:
Java:
package readfiles;

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JApplet;

public class Zeichne extends JApplet{


 public  Zeichne() {
   Paint();
 }
 
                public void Paint(Graphics g){
		Color myColor=new Color(83,139,252,50);
		g.setColor(myColor);


g.fillOval(1, 1,(int)ReadFiles.radius1,(int)ReadFiles.radius2);
	}


    }

bei Paint(); sagt er "found: no arguments", "required java.awt.Graphics" und "method Pain in Class... cannot be applied to given types"

was sagt mir das?

und ich musste radius1 und co in int's machen aber in ReadFile sind es doubles?

Deine Paint-Methode erwartet, das du ihr ein Graphics Objekt übergibst, aber du rufst die Methode per
Java:
paint();
auf. Da fehlt das Graphics Objekt!

was du mit den int`s und doubles meinst versteh ich nicht :\
 
hier in "ReadFile" sind es double (also radius1,radius2...)

Java:
JFileChooser chooser = new JFileChooser();

        double r = chooser.showOpenDialog(new JFrame());
        if (r == JFileChooser.APPROVE_OPTION) {
            String path = chooser.getSelectedFile().getPath();
            BufferedReader inputStream = null;
            try {
                inputStream = new BufferedReader(new FileReader(path));

                String l;
                while ((l = inputStream.readLine()) != null) {
                    String alleRadien =(l);                     
                    StringTokenizer werte = new StringTokenizer(alleRadien, "|");

                    double radius1 = Double.valueOf(werte.nextToken());
                    double radius2 = Double.valueOf(werte.nextToken());
                    double radius3 = Double.valueOf(werte.nextToken());

                       

                    System.out.println(radius1);
                    System.out.println(radius2);
                    System.out.println(radius3);

                }

aber in "Zeichne" musste ich sie zu Int's casten damit es funktioniert, warum?

Java:
g.fillOval(1, 1,(int)ReadFiles.radius1,(int)ReadFiles.radius2);

und so funktioniert es immernoch nicht:

Java:
package readfiles;

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JApplet;

public class Zeichne extends JApplet{


 public  Zeichne() {
   paint(Graphics g);
 }
 
   
    @Override
                public void paint(Graphics g){
		Color myColor=new Color(83,139,252,50);
		g.setColor(myColor);


g.fillOval(1, 1,(int)ReadFiles.radius1, (int) ReadFiles.radius2);
	}


    }

der meckert immernoch bei "public Zeichne() {paint(Graphics g);}"

"cannot find symbol: variable Graphics, lokation: class readfiles.Zeichne" ?
 

srea

Bekanntes Mitglied
Zur ersten Frage:
Du musstest sie zu ints casten, weil die Methode .fillOval() int-Werte erwartet und keine double.

Zur zweiten Frage:
Edit: Rest war undurchdacht, muss nu aber ins Meeting :\ Bite jemand übernehmen :D
 
Zuletzt bearbeitet:
läuft immernoch nicht, verdammt:

Java:
package readfiles;

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JApplet;

public class Zeichne extends JApplet{

Graphics g;
 public  Zeichne() {

   paint(g);
 }
 

  
   
    @Override
                public void paint(Graphics g){
		Color myColor=new Color(83,139,252,50);
		g.setColor(myColor);


g.fillOval(1, 1,(int)ReadFiles.radius1,(int)ReadFiles.radius2);
	}
    }

die Fehlermeldung ist:

java.lang.NullPointerException
at readfiles.Zeichne.paint(Zeichne.java:21)
at readfiles.Zeichne.<init>(Zeichne.java:12)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:308)
at sun.applet.AppletPanel.createApplet(AppletPanel.java:785)
at sun.applet.AppletPanel.runLoader(AppletPanel.java:714)
at sun.applet.AppletPanel.run(AppletPanel.java:368)
at java.lang.Thread.run(Thread.java:619)

kann einer damit was anfangen?
 

Irreparabel

Aktives Mitglied
Soweit ich weiß sollte dein ReadFiles.radius1 etc. nur funktionieren, wenn sie als static deklariert sind, was natürlich vollkommen Banane ist. Du solltest Zeichne die Radiuswerte übergeben, sprich
Java:
Zeichne(radius1, radius2, radius3) {
oä.
dann kannst du die Werte auch ohne getter benutzen und sie müssen nicht static sein.

Als nächstes, die paint Methode wird automatisch aufgerufen,
Java:
 public  Zeichne() {
   paint(Graphics g);
 }
ist vollkommen unnötig.
 
ok aber irgendwie läuft es immernoch nicht hier nochmal der ganze code:

ReadFiles.java:

Java:
package readfiles;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.StringTokenizer;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import java.awt.Graphics;
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
/**
 *
 * @author tom
 */
public class ReadFiles {

public  ReadFiles() {
        readFile();
}
    static double radius1,radius2,radius3;
    
   
    
    public void readFile() {



        JFileChooser chooser = new JFileChooser();

        double r = chooser.showOpenDialog(new JFrame());
        if (r == JFileChooser.APPROVE_OPTION) {
            String path = chooser.getSelectedFile().getPath();
            BufferedReader inputStream = null;
            try {
                inputStream = new BufferedReader(new FileReader(path));

                String l;
                while ((l = inputStream.readLine()) != null) {
                    String alleRadien =(l);                     
                    StringTokenizer werte = new StringTokenizer(alleRadien, "|");

                    double radius1 = Double.valueOf(werte.nextToken());
                    double radius2 = Double.valueOf(werte.nextToken());
                    double radius3 = Double.valueOf(werte.nextToken());
                   
                    new Zeichne(radius1, radius2);

                    System.out.println(radius1);
                    System.out.println(radius2);
                    System.out.println(radius3);

                }

            } catch (IOException ex) {
                System.out.println("ERROR: File not found or access not possible: " + path);
            } finally {
                if (inputStream != null) {
                    try {
                        inputStream.close();
                    } catch (IOException ex) {
                        System.out.println("ERROR: File close failed for: " + path);

                    }

                }
            }
        }

    }

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                ReadFiles rf = new ReadFiles();
                rf.readFile();
            }
        });


    }

}

Zeichne.java:

Java:
package readfiles;

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JApplet;

public class Zeichne extends JApplet{

Graphics g;
 public  Zeichne(double radius1, double radius2) {

   paint(g);
 }


    @Override
                public void paint(Graphics g){
		Color myColor=new Color(83,139,252,50);
		g.setColor(myColor);
                   

g.fillOval(1, 1,(int)ReadFiles.radius1,(int)ReadFiles.radius2);
	}
    }

Danke schonmal!
 

BumBel

Mitglied
so ich versuchs nochmal genau zu erklären
sobald du die klasse erzeugst wird paint ganz von alleine aufgerufen
du brauchst dazu paint(g) in deinem quellcode nirgends erwähnen, sprich auch nicht in deinem konstruktor aufrufen.
Du musst also deinen Konstruktor komplett leerlassen was paint betrifft weil es 1. unnötig is und 2. nich geht
 

Irreparabel

Aktives Mitglied
Ich habe ehrlich gesagt keine Ahnung was du da genau versuchst, momentan sieht es nämlich so aus:
Aus einer Datei 3 Werte lesen, von denen 2 an Zeichne übergeben werden, und dann?

Habe zumindest ReadFiles mal kurz angepasst:
Java:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.StringTokenizer;
import javax.swing.JFileChooser;
import javax.swing.JFrame;

public class ReadFiles {
 
private double radius1,radius2;

public  ReadFiles() {
	JFileChooser chooser = new JFileChooser();
 
        double r = chooser.showOpenDialog(new JFrame());
        if (r == JFileChooser.APPROVE_OPTION) {
            String path = chooser.getSelectedFile().getPath();
            BufferedReader inputStream = null;
            try {
                inputStream = new BufferedReader(new FileReader(path));
 
                String l;
                while ((l = inputStream.readLine()) != null) {
                    String alleRadien =(l);                     
                    StringTokenizer werte = new StringTokenizer(alleRadien, "|");
 
                   radius1 = Double.valueOf(werte.nextToken());
                   radius2 = Double.valueOf(werte.nextToken());
                   
                    new Zeichne(radius1, radius2);
 
                    System.out.println(radius1);
                    System.out.println(radius2);
 
                }
 
            } catch (IOException ex) {
                System.out.println("ERROR: File not found or access not possible: " + path);
            } finally {
                if (inputStream != null) {
                    try {
                        inputStream.close();
                    } catch (IOException ex) {
                        System.out.println("ERROR: File close failed for: " + path);
 
                    }
 
                }
            }
        }
 
    }
 
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
 
        public void run() {
          new ReadFiles();
        }
       }
      );
    }
 }

Soll nun ein weiterer JFrame mit JPanel erstellt werden auf dem was gezeichnet wird?
 
Zuletzt bearbeitet:
erstmal zum test soll in Zeichne.java ein Kreis mit höhe und breite (also radius1 und radius2) gezeichnet werden nacher will ich die Werte benutzen um ein Bild in einer gewissen größe darzustellen...und die größe soll aus einer Datei gelesen werden.
 
soweit ich das verstanden habe wird auf JApplet gezeichnet.

Java:
package readfiles;

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JApplet;

public class Zeichne extends JApplet{

                public void paint(Graphics g){
		Color myColor=new Color(83,139,252,50);
		g.setColor(myColor);
                   
                    System.out.println(ReadFiles.radius1);

g.fillOval(1, 1,22,666);
	}
    }

wenn ich es z.B so laufen lasse geht es aber nicht mit den eingelesenen Werten.
 

Irreparabel

Aktives Mitglied
Java:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.StringTokenizer;
import javax.swing.JFileChooser;
import javax.swing.JFrame;

public class ReadFiles extends JFrame{
 
private double radius1,radius2;

public  ReadFiles() {
	JFileChooser chooser = new JFileChooser();
 
        double r = chooser.showOpenDialog(new JFrame());
        if (r == JFileChooser.APPROVE_OPTION) {
            String path = chooser.getSelectedFile().getPath();
            BufferedReader inputStream = null;
            try {
                inputStream = new BufferedReader(new FileReader(path));
 
                String l;
                while ((l = inputStream.readLine()) != null) {
                    String alleRadien =(l);                     
                    StringTokenizer werte = new StringTokenizer(alleRadien, "|");
 
                   radius1 = Double.valueOf(werte.nextToken());
                   radius2 = Double.valueOf(werte.nextToken());
                   
                    new Zeichne(radius1, radius2);
 
                    System.out.println(radius1);
                    System.out.println(radius2);
 
                }
 
            } catch (IOException ex) {
                System.out.println("ERROR: File not found or access not possible: " + path);
            } finally {
                if (inputStream != null) {
                    try {
                        inputStream.close();
                    } catch (IOException ex) {
                        System.out.println("ERROR: File close failed for: " + path);
 
                    }
 
                }
            }
        }
 
    }
 
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
 
        public void run() {
          new ReadFiles();
        }
       }
      );
    }
 }

Java:
import javax.swing.*;
 
public class Zeichne extends JFrame{
	
 public  Zeichne(double radius1, double radius2) {
 setSize(500,500);
 add(new ZeichnePanel(radius1, radius2));
 setVisible(true);
 }
}

Java:
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.*;
 
public class ZeichnePanel extends JPanel{
 
 private double radius1;
 private double radius2;
	
 public  ZeichnePanel(double radius1, double radius2) {
 this.radius1 = radius1;
 this.radius2 = radius2;
 setBackground(Color.WHITE);
 }
 
  public void paintComponent(Graphics g){
	 super.paintComponent(g);
     g.fillOval(1, 1, (int) radius1 , (int) radius2);
     
    }
}

Sowas ginge beispielsweise, schau dir den Code mal an und frag, falls nötig.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Klassenübergreifende Ausgabe mittels "getter" nicht möglich Java Basics - Anfänger-Themen 21
T Klassen Klassenübergreifende Objekte erstellen lassen Java Basics - Anfänger-Themen 5
E Fehler bei Klassenübergreifende Attribute / Konsturktoren Java Basics - Anfänger-Themen 2
Z Klassenübergreifende Methoden Java Basics - Anfänger-Themen 4
G Klassenübergreifende Methoden Java Basics - Anfänger-Themen 13
A Klassenübergreifende Bearbeitung eines Arrays Java Basics - Anfänger-Themen 3
D Klassenübergreifende Variable Java Basics - Anfänger-Themen 3
H Auf Objekte bzw Variabeln aus einer anderen Methode zugreifen Java Basics - Anfänger-Themen 7
J Zwei String-Variabeln vergleichen Java Basics - Anfänger-Themen 5
K Zugriff auf Variabeln Wert einer Instanz Java Basics - Anfänger-Themen 4
P Umgebungsvariable Umgebungs-Variabeln, Java-3D Java Basics - Anfänger-Themen 0
M Mehrere Variabeln zusammenfassen Java Basics - Anfänger-Themen 4
O Variabeln aus einer andere Klasse dauerhaft einen anderen Wert übergeben Java Basics - Anfänger-Themen 5
G Methoden Variabeln übergeben - Eventbehandlung Java Basics - Anfänger-Themen 10
T Brauche Hilfe bei Variabeln Java Basics - Anfänger-Themen 4
H Variabeln einer Klasse in der anderen verwenden. Java Basics - Anfänger-Themen 3
J OOP Ausgabe verschiedener Variabeln aus verschiedenen Subclasses Java Basics - Anfänger-Themen 2
B unbestimmte Anzahl von Variabeln Java Basics - Anfänger-Themen 6
G Variabeln in Object schreiben Java Basics - Anfänger-Themen 8
B Probleme mit lokalen Variabeln Java Basics - Anfänger-Themen 5
M Nach Serializierung kein Zugriff auf Variabeln moeglich Java Basics - Anfänger-Themen 7
W Variabeln Übergabe Java Basics - Anfänger-Themen 14
G Problem mit Gültigkeit von Variabeln und Konstruktoren Java Basics - Anfänger-Themen 4
G Klassen: Wann initialisiere ich wo meine Variabeln Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben