der Zugriff auf eine variable von einer anderen Klasse
Sehr einfache Frage, aber ich kann es nicht tun. Ich habe 3 Klassen:
DrawCircle
Klasse
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class DrawCircle extends JPanel
{
private int w, h, di, diBig, diSmall, maxRad, xSq, ySq, xPoint, yPoint;
public DrawFrame d;
public DrawCircle()
{
w = 400;
h = 400;
diBig = 300;
diSmall = 10;
maxRad = (diBig/2) - diSmall;
xSq = 50;
ySq = 50;
xPoint = 200;
yPoint = 200;
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor(Color.blue);
g.drawOval(xSq, ySq, diBig, diBig);
for(int y=ySq; y<ySq+diBig; y=y+diSmall*2)
{
for(int x=xSq; x<w-xSq; x=x+diSmall)
{
if(Math.sqrt(Math.pow(yPoint-y,2) + Math.pow(xPoint-x, 2))<= maxRad)
{
g.drawOval(x, y, diSmall, diSmall);
}
}
}
for(int y=ySq+10; y<ySq+diBig; y=y+diSmall*2)
{
for(int x=xSq+5; x<w-xSq; x=x+diSmall)
{
if(Math.sqrt(Math.pow(yPoint-y,2) + Math.pow(xPoint-x, 2))<= maxRad)
{
g.drawOval(x, y, diSmall, diSmall);
}
}
}
}
}
DrawFrame
Klasse
public class DrawFrame extends JFrame
{
public DrawFrame()
{
int width = 400;
int height = 400;
setTitle("Frame");
setSize(width, height);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
Container contentPane = getContentPane();
contentPane.add(new DrawCircle());
}
}
CircMain
Klasse
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class CircMain
{
public static void main(String[] args)
{
JFrame frame = new DrawFrame();
frame.show();
}
}
Einer Klasse erstellt eine Bild, der andere zeichnet einen Kreis und füllt ihn mit kleineren Kreisen. In DrawFrame
ich Breite und Höhe. In DrawCircle
ich zugreifen zu können, müssen Sie die Breite und Höhe der DrawFrame
. Wie mache ich das?
Habe ich versucht, ein Objekt und versucht, mit .getWidth
und .getHeight
aber nicht bekommen kann es arbeiten. Brauche ich speziellen code hier, weil ich habe versucht, eine Menge Dinge, aber kann nicht ankommen es zu wirken. Bin ich deklarieren Breite und Höhe falsch in DrawFrame
? Erschaffe das Objekt der falsche Weg in DrawCircle
?
Ebenfalls, die Variablen, die ich verwenden in DrawCircle
sollte ich Sie im Konstruktor oder nicht?
InformationsquelleAutor der Frage | 2009-06-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten Sie machen Variablen öffentlichen Bereichen:
Könnte man dann Zugriff auf die Variablen wie folgt:
Eine bessere Lösung, jedoch würde es sein, dass die Variablen, private Felder fügen Sie zwei accessor-Methoden, die der Klasse, der Aufbewahrung der Daten in der Strecke Klasse gekapselt:
Dann können Sie die Breite/Höhe in etwa so:
Empfehle ich Sie verwenden die letztere Methode.
InformationsquelleAutor der Antwort Peter
Ich hatte das gleiche problem. Um zu ändern, Variablen aus verschiedenen Klassen, die ich Ihnen gemacht die Klasse erweitern, die Sie ändern. Ich habe auch die super-Klasse statische Variablen, so dass Sie kann geändert werden, indem alles, was erbt. Ich habe auch Ihnen geschützt für mehr Flexibilität.
Quelle: Schlechte Erfahrungen gemacht. Guten Unterricht.
InformationsquelleAutor der Antwort LifesAway
Das ist weil Sie sind nicht die Einstellung der Felder Breite und Höhe in JFrame, aber Sie setzen Sie auf lokale Variablen. Felder HÖHE und BREITE sind inhereted von ImageObserver
Sehen
http://java.sun.com/javase/6/docs/api/javax/swing/JFrame.html
Wenn Breite und Höhe entsprechen dem Stand der Rahmen, dann könnte man refactorize Sie, um Felder aus, und schreiben Sie Getter für Sie.
Dann, Sie konnte erstellen Sie einen Konstruktor, der erhält sowohl die Werte als Parameter
Wenn Breite und Höhe gehen, um die Konstante (erstellt nach), dann sollten Sie die letzten modifier. Auf diese Weise können Sie, sobald Sie einen Wert zugewiesen, Sie kann nicht geändert werden.
So, wie es ist geschrieben jetzt, nur können Sie erstellen eine Art von Kreis. Wenn Sie möchten, erstellen Sie unterschiedliche Kreise, sollten Sie überladung des Konstruktors mit einem mit Argumenten).
Zum Beispiel, wenn Sie möchten, ändern Sie die Attribute xPoint und yPoint, Sie hätten einen Konstruktor
EDIT:
Sind diese Argumente für Konstruktoren. Sie setzen Werte, auf Sie beim Aufruf der Konstruktor-Methode.
Nun, wenn die DrawCircle Konstruktor ausgeführt wurde, erhalten Sie die Werte, die Sie in Strecke als _width und _height bzw.
EDIT:
Versuchen Sie
http://java.sun.com/docs/books/tutorial/uiswing/components/frame.html
InformationsquelleAutor der Antwort Tom
Ich hoffe ich bin das problem zu verstehen richtig, aber es sieht aus wie Sie nicht haben einen Verweis zurück auf Ihre Strecke-Objekt aus DrawCircle.
Versuchen Sie dies:
Ändern Sie den Konstruktor Signatur für DrawCircle ein Strecke-Objekt. Im Konstruktor legen Sie die class-variable "d" auf der Strecke Objekt, das Sie gerade aufgenommen hat. Fügen Sie nun die getWidth/getHeight Methoden zur Strecke wie bereits in früheren Antworten. Sehen, wenn Sie können Sie bekommen, was Sie suchen.
Ihre DrawCircle Konstruktor geändert werden sollte, um so etwas wie:
Der letzten Zeile des Codes in der Strecke sollte folgendermaßen Aussehen:
Versuchen Sie dann mithilfe von d....getheight(), d....getWidth() und so weiter innerhalb DrawCircle. Dies setzt Voraus, Sie haben noch die Methoden zur Verfügung auf die Strecke, um Ihnen den Zugang natürlich.
InformationsquelleAutor der Antwort Lloyd McFarlin
wenn das, was Sie brauchen, ist die Breite und Höhe des Rahmens im Kreis, warum nicht pass der Strecke Höhe und Breite in die DrawCircle Konstruktor:
könnten Sie auch hinzufügen, ein paar neue Methoden DrawCircle:
oder auch:
wenn Sie diesen Weg gehen, müssen Sie die update-Strecke eine lokale var von der DrawCircle, auf die diese Methoden aufrufen.
edit:
beim Wechsel des DrawCircle Konstruktor wie beschrieben oben in meinem post, vergessen Sie nicht, fügen Sie die Breite und Höhe der Aufruf des Konstruktors in der Strecke:
InformationsquelleAutor der Antwort akf
Filename=url.java
wenn u wollen, nennen Sie die variable verwenden Sie einfach diese:
url.BASEURL + "hier Ihren code";
InformationsquelleAutor der Antwort Marwan Salim