PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Repaint auf JPanel



Jana
28-06-2006, 17:22
Vorsicht ich bin Anfänger

Ich habe einen JPanel (Klasse DrawPanel) mit einer Zeichnung. Diese möchte ich neuzeichnen lassen. Das funktioniert mit dem Mouse-Event ganz gut.

// Repaint
// ************************************************
public void run()
{
SwingUtilities.updateComponentTreeUI(this);
//this.repaint(); //Alternative
System.out.println ("run done" );
}

public void mousePressed(MouseEvent evt)
{ x = evt.getX();
y = evt.getY();
run();
}

//**********************************************

Jetzt möchte ich das ganze von einem anderen Fenster (andere Klasse) aus aufrufen mit einem Actionlistener:


DrawPanel neuzeichnen= new DrawPanel();
neuzeichnen.run();

Er schreibt mir dann brav "run done" aber führt das repaint() nicht aus. :confused:

bischi
28-06-2006, 17:42
Ich könnte mir vorstellen, dass das this probleme macht:

Eventuelle Abhilfe:



private JPanel thisPanel=null;
public void setThisPanel(JPanel toSet){
thisPanel=toSet;
}
...

public void run()
{
SwingUtilities.updateComponentTreeUI(thisPanel);
System.out.println ("run done" );
}
...
DrawPanel neuzeichnen= new DrawPanel();
neuzeichnen.setThisPanel(neuzeichnen);
neuzeichnen.run();


Nützt das was?

MfG Bischi

PS: Mit Threads immer aufpassen!
PS2: Wieso benutzt du überhaupt run?! Und nicht eine beliebige andere Funktion?

Jana
28-06-2006, 18:31
Danke für die schnelle Antwort.
Funktioniert leider nicht.
Ich sollte also mal Threads lesen.
Soweit bin ich noch nicht. Danke für den Tipp.

Ich möchte einen Fensteraufbau wie in Word.
Oben ein Menü und eine Toolbar und unten einen Panel mit Scrollbalken.

Die Menüs laufen ganz gut. Ich mache da separate Fenster auf, um Daten in die Datenbank zu schreiben. Das klappt.
Dann hole dich die Daten aus der Datenbank wieder ab und zeichne damit meine Rechtecke. Das geht auch noch.

Aber mit der Fenstertechnik klappt es überhaupt nicht.
Ich habe auf dem Panel keine Scrollbalken hinbekommen.
SetAutoscroll ging daneben. So habe ich auf den Frame eine Textarea gebaut und in diese den Panel gelegt. :mad:
Jetzt hätte ich gerne, daß mit einem Klick auf einen Toolbar-item sich die Grafik neu aufbaut und sich damit z.B. ein Zoom herstellen läßt.

Die Dokumentation von Sun ist mir noch keine große Hilfe.
Da ist mein Wissen noch nicht groß genug.
Momentan tappe ich ziemlich blind herum. :cool:

Detrius
28-06-2006, 18:41
Aber mit der Fenstertechnik klappt es überhaupt nicht.
Ich habe auf dem Panel keine Scrollbalken hinbekommen.
SetAutoscroll ging daneben. So habe ich auf den Frame eine Textarea gebaut und in diese den Panel gelegt.

Du suchst JScrollPane. :)
http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JScrollPane.html

Jana
28-06-2006, 19:17
Leider nicht, das habe ich verwendet.
JScrollPane funktioniert auf dem JPanel nicht. Ist hierfür nicht definiert.
Deswegen habe ich ja die JTextArea (ist hier definiert) eingebaut.
Das ist aber nichts. :o

bischi
28-06-2006, 19:40
Danke für die schnelle Antwort.
Funktioniert leider nicht.
Ich sollte also mal Threads lesen.
Soweit bin ich noch nicht. Danke für den Tipp.
Threads geben spätestens dann ein riesiges Chaos, wenn du irgendwelche gemeinsamen Variablen,... nutzt. (Zauberwort lautet hier synchronized - es lohnt sich aber auf jeden Fall, mal ein wenig Thread-Theorie zu machen...)


Ich möchte einen Fensteraufbau wie in Word.
Oben ein Menü und eine Toolbar und unten einen Panel mit Scrollbalken.

Vielleicht hilft dir sogar JInternalFrame noch weiter...


Die Menüs laufen ganz gut. Ich mache da separate Fenster auf, um Daten in die Datenbank zu schreiben. Das klappt.
Dann hole dich die Daten aus der Datenbank wieder ab und zeichne damit meine Rechtecke. Das geht auch noch.

ok - ich persönlich würde das ganze zwar alles in einem Fenster mittels einer JTabbedPane realisieren - ist aber wohl geschmackssache.


Aber mit der Fenstertechnik klappt es überhaupt nicht.
Ich habe auf dem Panel keine Scrollbalken hinbekommen.
SetAutoscroll ging daneben.

Layout? JScrollPane sollte aber eigentlich schon gehen (afair).


So habe ich auf den Frame eine Textarea gebaut und in diese den Panel gelegt. :mad:
Das ist sicherlich eine sehr schlechte Idee - da so nicht gedacht...


Jetzt hätte ich gerne, daß mit einem Klick auf einen Toolbar-item sich die Grafik neu aufbaut und sich damit z.B. ein Zoom herstellen läßt.
Grafik? Ich hab da immer Canvas verwendet... Ev hilft dir mein Tut dazu weiter: http://homepage.sunrise.ch/mysunrise/dominikbischoff/swing_tutorial_walfisch.pdf



Die Dokumentation von Sun ist mir noch keine große Hilfe.
Da ist mein Wissen noch nicht groß genug.
Momentan tappe ich ziemlich blind herum. :cool:
Auf meiner HP hats jede Menge bewährter Java-Links zu frei verfügbaren Onlinebüchern - einfach mal vorbeischauen, hat viele Codebeispiele.

MfG Bischi

Jana
28-06-2006, 20:18
Also fang ich mal an zu lesen. Danke!
Die Datenbank bekommt erst später ihre Berechtigung.
Irgendwie muß ich den Mouselistener auf dem JPanel noch hinbekommen
und damit die Scrollbalken.

Danke mal soweit!