Hi leute,
ich melde mich mal wieder mit einem KSKB um ein Problem darzustellen, dass mich gerade beschäftigt.
Was das Miniprogi tun sollte:
Ein Rect zeichnen und dann hintereinander linien dazu zeichnen. Die linien müssen von aussen "getriggert" werden können.
Wie/Was mein Miniprogi bis jetzt tut:
ich hab es hier als applet programmiert. Es gibt eine Main und eine MYPanel Klasse.
In der Main wird das Panel ins applet geadded und ein Thread aufgerufen der einfach etwa 3x in der Sekunde eine Funktion des Panels aufruft. In dieser soll nun die Linie auf das Panel gezeichnet werden. Dieser Funktion werden immer andere Werte (for-schleife im thread) übergeben damit drawLine immer wo anders hinzeichnet.
Das Problem:
kurz gesagt - die Lines werden nicht gezeichnet.
Mein Fehler liegt wohl irgendwo da, dass ich Graphics / paintComponent etc noch nicht ganz verstanden habe.
Ich dachte, dass ich wenn ich eine zeichen-Funktion eines Graphics nutze...automatisch zu dem im Graphics gespeicherte Panel hinzugezeichnet wird. Bei repaint wird dieser im Nachhinein hinzugezeichnete Inhalt wieder "gelöscht" da eben nur paintComponent aufgeruffen wird. (-> hier würde nach meiner Vorstellung also nur das Rechteck gezeichnet und die Linien "gelöscht")
Hab mich nun ein bissl mit update, validate und so gespielt, aber irgendwo hab ich einen Denkfehler.
Es kann ja wohl nicht sein, dass ich alle Informationen irgendwo selbst zwiscehnspeichern muss um dann beim nächsten repaint mein eigenes Array mit Lines oder so aufzurufen.
die Main:
und MyPanel:
Die Frage nochmal in Kurzform:
Obiges Miniprogi zeichnet die Linien beim Aufruf von zeug(int n) nicht. Was mache ich falsch?
Danke für Eure Mühen!!
Mit besten Grüßen Andi
ich melde mich mal wieder mit einem KSKB um ein Problem darzustellen, dass mich gerade beschäftigt.
Was das Miniprogi tun sollte:
Ein Rect zeichnen und dann hintereinander linien dazu zeichnen. Die linien müssen von aussen "getriggert" werden können.
Wie/Was mein Miniprogi bis jetzt tut:
ich hab es hier als applet programmiert. Es gibt eine Main und eine MYPanel Klasse.
In der Main wird das Panel ins applet geadded und ein Thread aufgerufen der einfach etwa 3x in der Sekunde eine Funktion des Panels aufruft. In dieser soll nun die Linie auf das Panel gezeichnet werden. Dieser Funktion werden immer andere Werte (for-schleife im thread) übergeben damit drawLine immer wo anders hinzeichnet.
Das Problem:
kurz gesagt - die Lines werden nicht gezeichnet.
Mein Fehler liegt wohl irgendwo da, dass ich Graphics / paintComponent etc noch nicht ganz verstanden habe.
Ich dachte, dass ich wenn ich eine zeichen-Funktion eines Graphics nutze...automatisch zu dem im Graphics gespeicherte Panel hinzugezeichnet wird. Bei repaint wird dieser im Nachhinein hinzugezeichnete Inhalt wieder "gelöscht" da eben nur paintComponent aufgeruffen wird. (-> hier würde nach meiner Vorstellung also nur das Rechteck gezeichnet und die Linien "gelöscht")
Hab mich nun ein bissl mit update, validate und so gespielt, aber irgendwo hab ich einen Denkfehler.
Es kann ja wohl nicht sein, dass ich alle Informationen irgendwo selbst zwiscehnspeichern muss um dann beim nächsten repaint mein eigenes Array mit Lines oder so aufzurufen.
die Main:
Code:
import java.applet.Applet;
public class Main extends Applet{
private MyPanel myPanel;
public void init(){
setSize(600, 400);
setLayout(null);
myPanel = new MyPanel();
myPanel.setLocation(0,0);
myPanel.setSize(getWidth(),getHeight());
add(myPanel);
new MyThread();
}
private class MyThread extends Thread{
MyThread(){
start();
}
public void run(){
for(int i = 0; i<300;i+=5){
try {
sleep(300);
} catch (InterruptedException e) {e.printStackTrace();}
myPanel.zeug(i);
System.out.println("jetzaaaa " + i);
}
}
}
}
und MyPanel:
Code:
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;
public class MyPanel extends JPanel{
private Graphics g = null;
MyPanel(){
}
public void paintComponent(Graphics g){
super.paintComponents(g);
this.g = g;
g.setColor(Color.BLACK);
g.drawRect(100,100,400,200);
}
public void zeug(int n){
if(g!=null) {
g.drawLine(100+n, 100, 100+n, 300);
// g.drawString(""+ n, 50, 50);
}
}
}
Die Frage nochmal in Kurzform:
Obiges Miniprogi zeichnet die Linien beim Aufruf von zeug(int n) nicht. Was mache ich falsch?
Danke für Eure Mühen!!
Mit besten Grüßen Andi