Hallo habe ein Problem: Habe hier ein Paint erstellt. Wenn ich nun z.B. mit dem Pinsel striche zieh (Pinsel entspricht op == 7) tritt folgendes Problem auf: (die rote linie kennzeichnet das eigentliche Bild, wie es eigendlich ist. Beim speichern wird jedenfalls nur dieser Teil bezeichnet, also kann sich nur dieser im Bild befinden, der Rest der magischerweise auftaucht muss er wo anders zeichnen, warum auch immer Oo).
http://img113.imageshack.us/img113/5258/bugnx4.jpg
Ich hab bereits mehrmals den Code durchgegangen, kann aber keinen Fehler finden. Der Fehler ist übrigens anscheinend nur auf dem Graphics der JPanel geschrieben und nicht ins Graphics des Images, da er verschwindet wenn ich das programm minimiere und wieder maximiere. Das Panel ist in einer JTabbedPane
repaint verweist auf ein Paint Component, in welchem nur g.drawImage(); ist.
Hier der Code der bei Mausbewegung und ausgewählter Operation die Zeichenoperationen durchführt
img ist ein Image. Es wurde korrekt geladen. Die ganzen Funktionen befinden sich in einer Klasse die JPanel extended
bin mir ziemlich sicher dass der Fehler hier wo auftritt, habe ja scho debugging versucht
mfg
http://img113.imageshack.us/img113/5258/bugnx4.jpg
Ich hab bereits mehrmals den Code durchgegangen, kann aber keinen Fehler finden. Der Fehler ist übrigens anscheinend nur auf dem Graphics der JPanel geschrieben und nicht ins Graphics des Images, da er verschwindet wenn ich das programm minimiere und wieder maximiere. Das Panel ist in einer JTabbedPane
repaint verweist auf ein Paint Component, in welchem nur g.drawImage(); ist.
Code:
@Override
public void paintComponent(Graphics g) {
if(img != null){
g.drawImage(img, 0, 0, null);
}
}
Hier der Code der bei Mausbewegung und ausgewählter Operation die Zeichenoperationen durchführt
img ist ein Image. Es wurde korrekt geladen. Die ganzen Funktionen befinden sich in einer Klasse die JPanel extended
Code:
@Override
public void mouseDragged(MouseEvent e) {
if (checkBounds(e.getX(), e.getY())) {
return;
}
Graphics2D g2 = (Graphics2D) this.getGraphics();
if (aa == true) {
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
} else {
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_OFF);
}
g2.setColor(c);
g2.setStroke(new BasicStroke(strokeSize, BasicStroke.CAP_ROUND,
BasicStroke.JOIN_MITER));
if (op == 14) {
if (x != -1 && y != -1) {
repaint();
if (lx == -1 && ly == -1) {
lx = e.getX();
ly = e.getY();
}
g2.drawOval(lx, ly, e.getX() - lx, e.getY() - ly);
}
}
if (op == 12) {
if (x != -1 && y != -1) {
repaint();
if (lx == -1 && ly == -1) {
lx = e.getX();
ly = e.getY();
}
g2.drawRect(lx, ly, e.getX() - lx, e.getY() - ly);
}
}
if (op == 15) {
if (x != -1 && y != -1) {
repaint();
if (lx == -1 && ly == -1) {
lx = e.getX();
ly = e.getY();
}
g2.drawRoundRect(lx, ly, e.getX() - lx, e.getY() - ly, (e
.getX() - lx) / 2, (e.getY() - lx) / 2);
}
}
if (op == 6) {
if (x != -1 && y != -1) {
g2 = (Graphics2D) img.getGraphics();
if (aa == true) {
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
} else {
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_OFF);
}
g2.setColor(c);
g2.drawLine(x, y, e.getX(), e.getY());
repaint();
}
}
if (op == 2) {
if (x != -1 && y != -1) {
g2 = (Graphics2D) img.getGraphics();
if (aa == true) {
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
} else {
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_OFF);
}
g2.setColor(Color.WHITE);
g2.setStroke(new BasicStroke(strokeSize, BasicStroke.CAP_ROUND,
BasicStroke.JOIN_MITER));
g2.drawLine(x, y, e.getX(), e.getY());
repaint();
}
}
if (op == 7) {
if (x != -1 && y != -1) {
g2 = (Graphics2D) img.getGraphics();
if (aa == true) {
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
} else {
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_OFF);
}
g2.setColor(c);
g2.setStroke(new BasicStroke(strokeSize, BasicStroke.CAP_ROUND,
BasicStroke.JOIN_MITER));
g2.drawLine(x, y, e.getX(), e.getY());
repaint();
}
}
if (op == 8) {
if (x != -1 && y != -1) {
g2 = (Graphics2D) img.getGraphics();
if (aa == true) {
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
} else {
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_OFF);
}
g2.setColor(c);
g2.setStroke(new BasicStroke(strokeSize, BasicStroke.CAP_ROUND,
BasicStroke.JOIN_MITER));
for (int i = 0; i < strokeSize; i++) {
Boolean vz = (int) Math.random() * 2 == 1;
int tsx = (int) (Math.random() * strokeSize);
int tsy = (int) (Math.random() * strokeSize);
if (vz == true) {
tsx = -tsx;
}
vz = (int) Math.random() * 2 == 1;
if (vz == true) {
tsy = -tsy;
}
g2.drawOval(e.getX() + tsx, e.getY() + tsy, 1, 1);
}
repaint();
}
}
x = e.getX();
y = e.getY();
}
bin mir ziemlich sicher dass der Fehler hier wo auftritt, habe ja scho debugging versucht
mfg