Problem beim Malen auf ein Panel

  • Themenstarter Themenstarter HändyÄndy
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
H

HändyÄndy

Gast
Ich habe eine JScrollPane und darin ein angepasstes JPanel. Das Ganze sieht so aus:
Code:
public class Trader_Panel extends JPanel {
	
	public boolean repaint_totally;
	private int old_pos_x , old_pos_y , new_pos_x , new_pos_y;
	private Color color;
	
	
	
	public void paint( Graphics g) {

		if( repaint_totally ) {
			//hier soll das ganze Panel neu gezeichnet werden. D.h. erst ein Löschen des ganzen Panel und dann
//sollen die Elemente eingezeichnet werden
	
		} else {
//hier soll aber NICHT das ganze Panel neu gezeichnet werden, sondern nur winzige Quatrate. Wie kann ich verhindern, 
//daß das ganze Panel neu gezeichnet wird ?

			//if we have no rect at the position then just ignore the deleting command
			g.setColor( color );
			if( old_pos_y != Constants.price_line_pos_y ) 
				g.clearRect( old_pos_x , old_pos_y , Constants.rect_size, Constants.rect_size);
			g.fillRect(new_pos_x, new_pos_y, Constants.rect_size, Constants.rect_size);
		}
	}
	
} //end class

Zur Zeit passiert folgendes. Ist repaint_totally true dann wird alles neu gezeichnet und das soll ja auch so sein. Ist repaint_totally false, dann sollen halt nur ein Teil gelöscht werden und ein anderer dafür hinzugefügt werden. Wie kann man das erreichen ?
 
Vielleicht sollte ich doch ein bisschen konkreter werden. Ich habe jetzt mal folgendes Beispiel programmiert:
Code:
import javax.swing.*;
import java.awt.*;
import java.util.*;

public class Test_Paint {

	public static void main(String[] args) {
		
		Test_Paint tp = new Test_Paint();
		Paint_frame frame = tp.new Paint_frame();
		Random r = new Random();
		
		int x = r.nextInt(800);
		int y = r.nextInt(600);
		int old_pos_y, old_pos_x;
		
		for( int i = 0 ; i < 20 ; ++i ) {
			old_pos_x = x;
			old_pos_y = y;
			x = r.nextInt(800); 
			y = r.nextInt(600);
			
			frame.paint_path(old_pos_x, old_pos_y, x, y);
			try {
				Thread.sleep(100);
			} catch ( Exception e ) {
				e.printStackTrace();
			}
		}

	}

	private class Paint_frame extends JFrame {
		
		static final long serialVersionUID = 10;
		
		JPanel panel;
		int x1,x2,y1,y2;
		
		public Paint_frame() {
			panel = new JPanel();
			getContentPane().add( panel );
			setSize( 800 , 600 );
			setVisible( true );
		}
		
		public void paint_path( int x1 , int y1 , int x2 , int y2 ) {
			this.x1 = x1;
			this.y1 = y1;
			this.x2 = x2;
			this.y2 = y2;
			repaint();
		}
		
		public void paint( Graphics g ) {
			g.drawLine(x1, y1, x2, y2);
		}
		
	}
}

Hier passiert eigentlich das was ich will. Ich zeichne nacheinander die Linien in das Frame und am Ende habe ich einen zufälligen Pfad. Das entscheidende ist: Füge ich einen neue Linie hinzu werden die vorher gezeichneten Linien nicht wieder gelöscht.

Bei meinem eigentlichen Problem oben wird zunächst "Alles" gezeichnet indem ich repaint_totally auf true setze. Dann muß ich aber einige Zeit lang nur kleine Rechtecke zeichnen und deshalb setze ich repaint_totally auf false. Nun verschwindet aber nach einiger Zeit das "Alles". D.h. das Panel wird komplett gelöscht und es werden nurnoch die Quatrate gezeichnet (da repaint_totally = false). Gibt es irgendwie in Java sowas wie ein automatisches Refresh des ganzen Panels nach einiger Zeit?
 
Das grundsätzliche Problem ist, daß du aktiv zeichnest,
anstatt, wie üblich, die GUI das selbst erledigen zu lassen.

Allerdings ist es auch schwer, deinen Code umzuformen, da nicht
klar ist, was genau du eigentlich vorhast.

Ich schätze mal das ist auch der Grund, warum dir bisher keiner
geantwortet hat. :shock:
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben