direkt Zeichnen
-
wie kann mann etwas zeichen wenn das frame bereits gebildet wurde, also paint() bereits ausgeführt würde.
mit repaint() geht das nicht da wird ja nur die paint nochmal auf gerufen(würd ich jetzt sagen).
Ich möchte schon neue Objekte bilden und die dann zeichnen.
hoffe es ist klar was ich meine.
-
Du rufst die Methode getGraphics für die Komponente aus (Frame, Panel etc.) und bekommst ein Graphics-Objekt. Mit dem kannst du dann zeichnen - leider sind die Objekte nur sichtbar bis paint erneut aufgerufen wird; danach müsstest du sie erneut zeichnen lassen.
-
Wenn du die Sachen nicht immer neu zeichnen möchtest, dann kannst du sie gleich zweimal zeichnen. Einmal auf das Graphics-Objekt der Komponente und einmal auf ein Graphics-Objekt eines BufferedImage. In der paint-Methode oder paintComponent-Methode der Komponente zeichnest du dann das BufferedImage auf die Komponente.
-
alles klar - danke
-
Original erstellt von Gregor:
Wenn du die Sachen nicht immer neu zeichnen möchtest, dann kannst du sie gleich zweimal zeichnen. Einmal auf das Graphics-Objekt der Komponente und einmal auf ein Graphics-Objekt eines BufferedImage. In der paint-Methode oder paintComponent-Methode der Komponente zeichnest du dann das BufferedImage auf die Komponente.Interessant ... ist das performanter? Du weisst ja ... ich habs net so mit malen
-
Original erstellt von CengizS:
Interessant ... ist das performanter? Du weisst ja ... ich habs net so mit malenKommt auf die Anzahl der Zeichenoperationen an. Ein Bild zu zeichnen dauert immer gleich lange (und geht auch sehr schnell).
...da fällt mir ein, dass ich mal wieder an dem Tut weiterschreiben sollte (bin in letzter Zeit leider nicht dazu gekommen).
-
Gut Ding will Weile haben - hat man uns gelehrt
-
haut irgendwie nicht hin:
[java]
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.Graphics;
import javax.swing.JPanel;public class malen
{
public static void main(String args[])
{
JFrame f = new JFrame("trest");
f.setLocation(0,0);
f.setSize(400,400);JPanel p = new JPanel()
{
public void paint(Graphics g)
{
g.drawLine(7,7,40,40);
}
};
p.setLocation(5,5);
p.setSize(100,100);
f.getContentPane().add(p);
Graphics gg = p.getGraphics();
if (gg != null)
{
gg.drawString("juhu",10,10);
}
else
{
f.getContentPane().add(new JLabel("mh"));
}
f.setVisible(true);
}
}[/code]bekomme immer die ausgabe "mh".
-
*push*
-
Ich hatte schonmal ein ähnliches Problem. Anscheinend wird das Graphics-Objekt nicht gleich beim Konstruieren des Panels erstellt, sondern erst später irgendwann.
EDIT : Du kannst ja mal im Code nachgucken.
[ Dieser Beitrag wurde am 05.02.2003 um 20:32 Uhr von Gregor editiert. ]
-
[ hier stand vorpubertäres Zeug ]
Danke für Deinen fachlich äußerst Wertvollen Beitrag!!!
[ Dieser Beitrag wurde am 06.02.2003 um 11:49 Uhr von CengizS editiert. ]
-
Original erstellt von <stevg @ abendschule>:
[ hier stand vorpubertäres Zeug ]Garnicht. :p
Ein Graphics-Objekt wird es erst dann geben, wenn das Panel das erste mal gezeichnet wurde. Angenommen, es gäbe früher ein Graphics-Objekt, dann würde das, was du auf das Graphics-Objekt zeichnest niemals angezeigt werden, da das Panel ja noch garnicht sichtbar ist und beim Zeichnen des Panels alles, was du vorher mit dem Graphics-Objekt gemacht hast, überzeichnet werden würde. Es macht somit keinen Sinn, früher ein solches Objekt zu haben.
...naja : Das wird so nicht ganz richtig sein, aber es geht in die richtige Richtung. Hauptsache, du weißt in etwa, warum es Unsinn ist, so früh zu zeichnen.
Wenn etwas immer auf das Panel gezeichnet werden soll, dann überschreib die paintComponent-Methode
[ Dieser Beitrag wurde am 06.02.2003 um 11:48 Uhr von CengizS editiert. ]
-
Original erstellt von <stevg @ abendschule>:
[ hier stand vorpubertäres Zeug ][ und der hat sich dazu hinreißen lassen ... ]
[ Dieser Beitrag wurde am 06.02.2003 um 11:49 Uhr von CengizS editiert. ]
-
Hört mit dem Unsinn auf - wenn ihr das Problem lösen könnt postet ansonsten lasst den Thread einfach stehen ... trollen könnt ihr im OT-Forum. Danke!
[ Dieser Beitrag wurde am 06.02.2003 um 11:51 Uhr von CengizS editiert. ]