Hi Leute,
mein Programm hat ein DrawPanel wo eine große (2000x2000 Pixel) Grafik drauf liegt.
Wenn ich jetzt mit den Scrollbalken scrolle, dann ruckt das Bild total.
Hier sind die Methoden die ich zum zeichnen verwende.
Wenn ihr den ganzen Programmcode benötigt um mir auf die Sprünge zu helfen stell ich den gerne auch zu Verfügung. Mein Programm ist schon echt weit (fast fertig), nur noch dieses nicht-lösbare-Performance-Problem.
Achja ich hab ein Intel2CoreDuo Notebook, mit ner GeForce 7300Go(512Mb), 2GB Ram und WindowsXP, falls das irgendwie weiter hilft.
Habt jetzt schonmal tausend Dank! Ich steck total in der Klemme, denn am Dienstag ist Projektabgabe^^
Mfg
MisterDan
mein Programm hat ein DrawPanel wo eine große (2000x2000 Pixel) Grafik drauf liegt.
Wenn ich jetzt mit den Scrollbalken scrolle, dann ruckt das Bild total.
Hier sind die Methoden die ich zum zeichnen verwende.
Code:
/*
*
*Wir aufgerufen sobald, irgendwas neu gezeichnet werden muss. Z.B. wenn man mit der Maus ins DrawPanel klickt *(um einen Waypoint zu setzen)
*
*/
public void updateUserInterface(){
Graphics g = getGraphics();
if (g != null)
redrawGraphics(g);
}
public void paint(Graphics g){
//g = this.bi.createGraphics();
redrawGraphics(g);
}
/*
*
* Hier wird alles gezeichnet. Ich vermute das dass Performance Problem hier liegt.
*
*/
private void redrawGraphics(Graphics g){
//initialize Antialiasing
Graphics2D g2d = this.bi.createGraphics();
//Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
if(!mouseEvent){
//Screen erneuern
if(!mapLoaded){
g2d.setColor(Color.gray);
g2d.fillRect(0,0,getWidth(), getHeight());
}
//Map neu zeichnen
if(mapLoaded){
tileMap.draw(g2d);
//Graphics graphics = this.buffer.getDrawGraphics();
//graphics.drawImage(this.bi, 0, 0, null);
// if(!this.buffer.contentsLost()){
// this.buffer.show();
// }
}
}
Iterator<Connection> cIter = wpController.getCList().values().iterator();
while(cIter.hasNext()){
Connection c = cIter.next();
g2d.setColor(connectionColor);
g2d.setStroke(new BasicStroke(4.0f));
g2d.drawLine(c.getStartX(), c.getStartY(), c.getEndX(), c.getEndY());
int middleX = calculateMiddlePointX(c.getStartX(), c.getEndX());
int middleY = calculateMiddlePointY(c.getStartY(), c.getEndY());
g2d.setColor(connectionColor);
g2d.fillOval(middleX-5, middleY-15, 30, 40);
g2d.setColor(Color.white);
g2d.setFont(cFont);
g2d.drawString(""+c.getConnectionID(), middleX+6, middleY);
g2d.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();
g2d.setColor(waypointColor);
g2d.setStroke(new BasicStroke(4.0f));
g2d.fillOval(xcoord-25, ycoord-25, 50, 50);
if(wp.getWaypointID()<10){
g2d.setFont(wpInnerFont);
g2d.setColor(wpInnerFontColor);
g2d.drawString(""+wp.getWaypointID(), xcoord-2, ycoord+5);
g2d.setFont(wpOuterFont);
g2d.setColor(wpOuterFontColor);
g2d.drawString(wp.getName(), xcoord-30, ycoord-25);
} else {
g2d.setFont(wpInnerFont);
g2d.setColor(wpInnerFontColor);
g2d.drawString(""+wp.getWaypointID(), xcoord-6, ycoord+5);
g2d.setFont(wpOuterFont);
g2d.setColor(wpOuterFontColor);
g2d.drawString(wp.getName(), xcoord-30, ycoord-30);
}
}
mouseEvent = false;
//double buffering
Graphics graphics = this.buffer.getDrawGraphics();
graphics.drawImage(this.bi, 0, 0, null);
if (!this.buffer.contentsLost()) {
this.buffer.show();
}
if (graphics != null) {
graphics.dispose();
}
if (g2d != null) {
g2d.dispose();
}
}
Wenn ihr den ganzen Programmcode benötigt um mir auf die Sprünge zu helfen stell ich den gerne auch zu Verfügung. Mein Programm ist schon echt weit (fast fertig), nur noch dieses nicht-lösbare-Performance-Problem.
Achja ich hab ein Intel2CoreDuo Notebook, mit ner GeForce 7300Go(512Mb), 2GB Ram und WindowsXP, falls das irgendwie weiter hilft.
Habt jetzt schonmal tausend Dank! Ich steck total in der Klemme, denn am Dienstag ist Projektabgabe^^
Mfg
MisterDan