DragAndDrop-Waypoints bewegen, ABER Bildschirm flackert

Status
Nicht offen für weitere Antworten.

MisterDan

Mitglied
Hallo zusammen,

ich habe ein DrawPanel. Wenn man mit der Maus darauf klickt wird ein Waypoint erstellt und an die Mausposition gesetzt.
Die Klasse Waypoint erbt aber nicht von Component wie man es jetzt erwarten würde.
Ein Waypoint besteht quasi nur aus einer X,Y-Position, einem Radius und einer ID.
Die Waypoints werden beim erstellen in einen Vektor geschreiben und der draw-Methode im drawPanel wird gesagt, das sie sich den Vektor holen soll und dementsprechend Kreise zeichnen soll. (g2d.drawOval(....))

Nun möchte ich diesen Kreis mit der Maus "anfassen" und hin und her schieben.

Hab das auch qausi alles hingekriegt nur dass während ich einen Waypoint verschiebe, der Bildschirm total am Flackern ist.
Kann mir jemand sagen wie ich das beheben kann?

Mfg

MisterDan
 

MisterDan

Mitglied
ok, dann hier mal die entsprechende DrawPanel klasse!
In dieser Klasse wird gezeichnet.

Code:
package local.gui;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.util.Iterator;

import javax.swing.JPanel;

import local.persistance.mapLoader.TileMap;

/**
 * 
 * 		@author
 * 		Daniel Lüers
 */
@SuppressWarnings("serial")
public class DrawPanel extends JPanel {

    private boolean mouseEvent;
    private boolean mapLoaded;
    private int x;
    private int y;
    private Font wpOuterFont;
    private Font wpInnerFont;
    private Font cFont;
    private Color wpInnerFontColor;
    private Color wpOuterFontColor;
    private Color waypointColor;
    private Color connectionColor;
    private TileMap tileMap;
    private WPEditorController wpController;
    
	public DrawPanel(final WPEditorController wpController){
		
		this.wpController = wpController;
		this.wpOuterFont = new Font("SansSerif", Font.BOLD, 15); 
		this.wpInnerFont = new Font("SansSerif", Font.TYPE1_FONT,  12); 
		this.cFont = new Font("SansSerif", Font.PLAIN, 9);
		this.waypointColor = new Color(51,102,153);
		this.connectionColor = new Color(51,102,153);
		this.wpInnerFontColor = new Color(255, 255, 255);
		this.wpOuterFontColor = new Color(0,0,0);
		this.mouseEvent = false;
		this.mapLoaded = false;
		this.addMouseListener(new MouseAdapter(){
			public void mouseClicked(MouseEvent event){	
				x = event.getX();
				y = event.getY();
				mouseEvent = true;
				wpController.doLogic(x, y);
			}
		});
		this.addMouseMotionListener(new MouseMotionListener(){

			public void mouseDragged(MouseEvent event) {
				Waypoint selectedWaypoint = wpController.getWaypointByPosition(event.getX(), event.getY());
				if(selectedWaypoint != null){
					wpController.moveWaypoint(selectedWaypoint.getWaypointID(), event.getX(), event.getY());
				}				
			}
			
			public void mouseMoved(MouseEvent arg0) {}
			
		});
	}
	
	public void updateUserInterface(){
		Graphics g = getGraphics();
		if (g != null)
			redrawGraphics(g);
	}
	
	public void updateUserInterface(boolean clearScreen){
		Graphics g = getGraphics();
		if (g != null)
			redrawGraphics(g, clearScreen);		
	}
	
	public void paintComponent(Graphics g){
		redrawGraphics(g);
	}
	
	private void redrawGraphics(Graphics g, boolean clearScreen){
		Graphics2D g2 = (Graphics2D) g;
		//Screen erneuern
		g2.setColor(Color.gray);
		g2.fillRect(0,0,getWidth(), getHeight());
	}
	
	private void redrawGraphics(Graphics g){
		//initialize Antialiasing
		Graphics2D g2 = (Graphics2D) g;
		g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
		
		if(!mouseEvent){
			//Screen erneuern
			if(!mapLoaded){
				g2.setColor(Color.gray);
				g2.fillRect(0,0,getWidth(), getHeight());
			}
			//Map neu zeichnen
			if(mapLoaded){
				tileMap.draw(g2);
				if(wpController.getShowWireFrame()){
				createWireFrame(wpController.getDrawPanelDimension().width,
						wpController.getDrawPanelDimension().height, wpController.getWireFramesize(), g2);
				}
			}
		}
		
		Iterator<Connection> cIter = wpController.getCList().values().iterator();
		while(cIter.hasNext()){
			Connection c = cIter.next();
			
			g2.setColor(connectionColor);
			g2.setStroke(new BasicStroke(4.0f));
			g2.drawLine(c.getStartX(), c.getStartY(), c.getEndX(), c.getEndY());
			
			int middleX = calculateMiddlePointX(c.getStartX(), c.getEndX());
			int middleY = calculateMiddlePointY(c.getStartY(), c.getEndY());
			
			g2.setColor(connectionColor);
			g2.fillOval(middleX-5, middleY-15, 30, 40);
			g2.setColor(Color.white);
			g2.setFont(cFont);
			g2.drawString(""+c.getConnectionID(), middleX+6, middleY);
			g2.drawString(""+c.getWeight(), middleX+2, middleY+17);
		}
		
		Iterator<Waypoint> wIter = wpController.getWpList().values().iterator();
		while(wIter.hasNext()){
			Waypoint wp = wIter.next();
			
			int xcoord = wp.getXPos();
			int ycoord = wp.getYPos();
			
			g2.setColor(waypointColor);
			g2.setStroke(new BasicStroke(4.0f));
			g2.fillOval(xcoord-25, ycoord-25, 50, 50);
			
			if(wp.getWaypointID()<10){
				g2.setFont(wpInnerFont);
				g2.setColor(wpInnerFontColor);
				g2.drawString(""+wp.getWaypointID(), xcoord-2, ycoord+5);
				g2.setFont(wpOuterFont);
				g2.setColor(wpOuterFontColor);
				g2.drawString(wp.getName(), xcoord-30, ycoord-25);
			} else {
				g2.setFont(wpInnerFont);
				g2.setColor(wpInnerFontColor);
				g2.drawString(""+wp.getWaypointID(), xcoord-6, ycoord+5);
				g2.setFont(wpOuterFont);
				g2.setColor(wpOuterFontColor);
				g2.drawString(wp.getName(), xcoord-30, ycoord-30);
			}
		}
		mouseEvent = false;
	}
	
	public void createWireFrame(int width, int height, int size, Graphics2D g2){
		//senkrechten linien zeichnen
		for(int w=0; w<width; w+=size){
			g2.drawLine(w, 0, w, height);
		}
		//horizontale Linien zeichnen
		for(int h=0; h<height; h+=size){
			g2.drawLine(0, h, width, h);
		}
	}
	
	public int calculateMiddlePointX(int startX, int endX){
		return (startX+endX)/2;
	}
	
	public int calculateMiddlePointY(int startY, int endY){
		return (startY+endY)/2;
	}
	
	/*
	 * SETTER
	 */
	public void setTileMap(TileMap map){
		this.tileMap = map;
	}
	
	public void setMapLoaded(boolean loaded){
		this.mapLoaded = loaded;
	}

}

also sobald ich waypoints hinzufüge oder bewege(dragge) dann rufe ich updateUserInterface() auf!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M DragAndDrop - aus Browser ins Programm AWT, Swing, JavaFX & SWT 6
HaukeG JavaFX JavaFX Resize und DragAndDrop eines Pane AWT, Swing, JavaFX & SWT 4
S Schachspiel mit DragAndDrop AWT, Swing, JavaFX & SWT 1
T Swing Allgemeines Problem mit der Performance bei DragAndDrop AWT, Swing, JavaFX & SWT 2
P DragAndDrop aus JTable ohne vorheriges markieren AWT, Swing, JavaFX & SWT 8
P DragAndDrop zw Component und Container AWT, Swing, JavaFX & SWT 4
H Swing Waypoints in JXMapKit löschen AWT, Swing, JavaFX & SWT 1
TheSepp Fenster um x Pixel bewegen, wenn man auf dem Knopf drückt AWT, Swing, JavaFX & SWT 10
N Objecte bewegen mit Tastatur AWT, Swing, JavaFX & SWT 5
B mit maus Objekt bewegen AWT, Swing, JavaFX & SWT 3
DonBronson Objekt bewegen (Mausposition) AWT, Swing, JavaFX & SWT 3
Z Button bewegen und Plätze tauschen AWT, Swing, JavaFX & SWT 4
Z Swing Button anklicken und bewegen AWT, Swing, JavaFX & SWT 2
F JLabel mit ImageIcon per Button bewegen AWT, Swing, JavaFX & SWT 4
D JavaFX Pane per Drag&Drop bewegen? AWT, Swing, JavaFX & SWT 2
A Swing JButton mit Pfeiltasten bewegen AWT, Swing, JavaFX & SWT 6
L Swing Panels bewegen wie Windows 10 Kacheln AWT, Swing, JavaFX & SWT 0
KilledByCheese 2D-Grafik Feld automatisch bewegen, in zeitabständen AWT, Swing, JavaFX & SWT 7
N Programm mit Swing und Thread, Figur bewegen sich nicht AWT, Swing, JavaFX & SWT 6
K Funktion für das Bewegen des Balles AWT, Swing, JavaFX & SWT 5
Z SnakeGame Schlange per KeyListener bewegen! AWT, Swing, JavaFX & SWT 10
F 2D-Grafik Objekt durch Einwirkung einer Kraft im Raum bewegen AWT, Swing, JavaFX & SWT 14
B Swing Form undecorated: Beim Bewegen geht die Maus immer automatisch zur linken Seite. AWT, Swing, JavaFX & SWT 7
A Panel lässt sich nicht bewegen AWT, Swing, JavaFX & SWT 2
D Bild bewegen mit Tastendruck AWT, Swing, JavaFX & SWT 7
E Swing Objekt zu Position (Point) bewegen AWT, Swing, JavaFX & SWT 2
M Swing + Java2D Sichtfeld bewegen verhält sich träge AWT, Swing, JavaFX & SWT 4
F Maus von alleine bewegen! AWT, Swing, JavaFX & SWT 8
O JLabel bewegen AWT, Swing, JavaFX & SWT 10
D Swing Objekte bewegen mit MouseMotionListener AWT, Swing, JavaFX & SWT 4
T 2D-Grafik Slideshow (DoubleBuffering und Image transformieren/bewegen) AWT, Swing, JavaFX & SWT 6
J Grafik (Kreis) schneller bewegen? AWT, Swing, JavaFX & SWT 6
H Rechteck via Mouse bewegen AWT, Swing, JavaFX & SWT 2
M Eine Kugel nach rechts bewegen AWT, Swing, JavaFX & SWT 5
M Objekte in JPanel bewegen AWT, Swing, JavaFX & SWT 4
U Swing JLabel bewegen mittels Thread AWT, Swing, JavaFX & SWT 3
K Jbutton bewegen AWT, Swing, JavaFX & SWT 4
T jPanels im jFrame bewegen - Auch ohne Textfield? AWT, Swing, JavaFX & SWT 4
G AWT Images aus Imagearray an die Maus pappen und bewegen AWT, Swing, JavaFX & SWT 4
M JPanel im JPanel bewegen AWT, Swing, JavaFX & SWT 7
T Processing: Bild auf X-Achse bewegen AWT, Swing, JavaFX & SWT 4
T Objekt in Kreisbahn bewegen AWT, Swing, JavaFX & SWT 5
E JWindow bewegen, minimieren, vergrößern und schließen AWT, Swing, JavaFX & SWT 5
M grafische objekte erstellen und bewegen AWT, Swing, JavaFX & SWT 4
L 2 Fenster gleichzeitig bewegen AWT, Swing, JavaFX & SWT 2
M Swing [JTextPane] Cursor lässt sich nicht mit Pfeiltasten bewegen AWT, Swing, JavaFX & SWT 3
W Objekte auf JPanel bewegen??? AWT, Swing, JavaFX & SWT 2
C Fenster gleich bewegen funktioniert nicht ganz! AWT, Swing, JavaFX & SWT 11
B "weiches" Bewegen von einem JComponent AWT, Swing, JavaFX & SWT 18
M Fenster ohne Dekoration bewegen AWT, Swing, JavaFX & SWT 3
M Kreis mit gedrückter Maus bewegen AWT, Swing, JavaFX & SWT 20
S JButton bewegen AWT, Swing, JavaFX & SWT 7
S transparent + bewegen AWT, Swing, JavaFX & SWT 3
H Bild mit Mauszeiger bewegen AWT, Swing, JavaFX & SWT 2
K Punkte in eine bestimmte Richtung bewegen AWT, Swing, JavaFX & SWT 5
T Labels gleichzeitig bewegen und anklicken AWT, Swing, JavaFX & SWT 3
R Buttons bewegen AWT, Swing, JavaFX & SWT 4
W Components Focus mit TAB-Taste VERTIKAL bewegen AWT, Swing, JavaFX & SWT 4
P JSlider automatisch bewegen AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben