Aufruf von repaint von einer anderen Klasse JFrame
Ich versuche zu rufen repaint von einer anderen Klasse. Aber es funktioniert nicht. Ich habe zu zeichnen, die auf einem Rahmen.
public class Tester extends JFrame{
public static dtest d ;
public static void main(String[] args) {
Tester t = new Tester();
d = new dtest();
test tnew = new test();
}
public static class dtest extends JFrame implements MouseMotionListener{
public static int x,y;
dtest()
{
super("title");
setSize(500,500);
setVisible(true);
addMouseMotionListener(this);
}
@Override
public void mouseDragged(MouseEvent e) {
x = e.getX();
y = e.getY();
repaint();
}
@Override
public void mouseMoved(MouseEvent e) {
//TODO Auto-generated method stub
}
public void paint(Graphics g)
{
System.out.println("I am called");
}
}
public static class test {
public test()
{
for(int i = 0 ; i < 5 ; i++)
{
System.out.println("I am called from run");
d.repaint();
}
}
}
}
diese Drucke
I am called from run
I am called from run
I am called from run
I am called from run
I am called from run
damit es nicht in der Ausführung der paint()
Teil. d.repaint()
funktioniert nicht. warum?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Werfen Sie einen Blick auf auf dieser Seite und Blick auf die erste Antwort. Es ist ein ähnliches wenn nicht genau die Frage zu verkaufen.
JFrame ist
paint()
Methode ist veraltet. Der compiler oder deiner IDE sein sollte, meckert ein bisschen, vor allem, wenn Sie den@Override
tag direkt über die Methode (verwenden Sie diese, um zu testen, ob diese Methode umgeschrieben werden kann... aka das, was Sie zu tun versuchen).Dies bedeutet, dass seine Verwendung wurde abgeraten und einige Funktionen wurden entfernt. Bei der Verwendung von
javax.swing
Sie erfahren wollen, das system komplett überJPanels
undJComponents
. Etwas malen auf einem Bildschirm, Sie werden wollen, fügen Sie eine benutzerdefinierte Klasse, die Sie erweitertJPanel
mit deradd(Component c)
Methode. Dann überschreiben Sie diepaintComponent(Graphics g)
Methode in dieser Klasse. Stellen Sie sicher, dass die erste Zeile in dieser Methode werdensuper.paintComponent(g);
so dass die Fenster können, selbst aktualisieren.Vollständigkeit halber:
So, wenn die
repaint()
oderrevalidate()
Methode wird aufgerufen, auf derMyWindow
das Panel bekommst einpaintComponent
nennen.Bitte lassen Sie mich wissen in den Kommentaren, wenn Sie benötigen keine weitere Hilfe.
Bearbeitet:
Da Sie verwenden müssen, MouseMotionListener, und ich bin immer noch nicht ganz verstehen, den Kontext und die Schwierigkeiten der "muss ich anrufen repaint von einer anderen Klasse"... ich werde mein bestes versuchen.
Erstens, check-out dieses tutorial auf den Oracle-Seiten. Schauen Sie sich auch die anderen GUI ' s. Du wirst eine Menge lernen über die Organisation und Anzeige zu machen, dass Sie erkennen, wie Ihr system funktioniert mit Ihnen.
Nun, zu Ihren Fragen:
i have to use MouseMotionListener.
Nicht ganz... es ist ein guter Weg für set-up, aber man kann einen Thread (etwas, was ständig läuft-Methoden über und über) prüfen die Koordinaten der Maus. Sie werden wollen, beginnen, dies zu tun, wenn man in spielen und sonstigen Anwendungen.
Weiter:
I tried that with JPanel but i could not do that.
Wenn Sie Lesen Sie die Anleitung oben auf mein edit, du siehst, Sie umzusetzen MouseMotionListener mit Leichtigkeit.Weiter:
I prefer to do it with JFrame.
Wenn Sie wollen, verarbeiten Sie die Maus in das JFrame, führen Sie die folgenden: Haben Sie Ihr JFrame die Zuhörer, aber das JPanel werden, wo der Maus-Daten kommt. Wie folgt:Weiter:
Now i have to update the frame from another class. I could not find a way to update the GUI(the frame) from another class.
Einfach. Da das JPanel ist, was aktualisiert werden muss, fügen Sie die folgende Methode, um die
MyWindow
Klasse:Und fügen Sie diese an, Wann immer Sie brauchen, um es zu aktualisieren:
Weiter:
all the answers here extended JPanel. So i could not find my answer.
Bitte ich zu entschuldigen, aber Sie BRAUCHEN ein panel. Es ist möglich, mit JFrames, aber wenn Sie anfangen wollen, Dinge zu tun, raw-und low-level, die Sie benötigen, um zu lernen, wie diese Dinge funktionieren, indem Sie lernen Lesen Sie den oracle tutorials und in der oracle-Dokumentation. Für jetzt nutzen Sie JPanels in alle Möglichkeiten, die ich Ihnen gezeigt habe.
Weiter:
from another class I have to draw something on JFrame.Is that possible?
Ja, in der Tat! Wann immer Sie wollen, etwas zu zeichnen:
Ich hoffe wirklich, dass ich geholfen habe, aber ein Programm in java müssen Sie die tools verwenden, die Sie geben, vor allem, wenn es um hohe Dinge wie
Swing
. Es gibt tutorials, die überall für dieses Zeug. Bitte Lesen Sie diese, bevor Sie Fragen für bestimmte in der Zukunft helfen.