Hallo;
ich hätte mal zwei kleine Frage.
Hier mal ein kleines Applet, mit dem man Linien zeichnen kann.
Frage 1:
Das Problem ist hat vermutlich mehr mit Graphics zutun.
Wieso gibt es immer diesen "radier Effekt" wenn ich bei gedrückter Maustaste eine Linie temporär zeichen.
Wenn ich auf dem selben Graphics Obejekt hab ich es verstanden. Aber wieso ist das der Fall wenn ich das jetzt wie bei mir (in MouseDragged) mit einer Kopie mache?
Ich hätte erwartet, dass die alten Linien zumindesten nach gc.dispose() wieder auftauchen.
Frage 2:
wieso bekommt man NullpointerExceptions wenn ich, anstatt jedes mal neu die Graphics-Instanz zu holen, Graphics g als Klassenvariable deklariere und diese dann in der init()-Methode einmal setze?
Danke im Vorraus
ich hätte mal zwei kleine Frage.
Hier mal ein kleines Applet, mit dem man Linien zeichnen kann.
Java:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.JApplet;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class ZeichenApplet extends JApplet implements MouseListener,
MouseMotionListener {
private JPanel panel;
private int xa = 0, ya = 0, xe = 0, ye = 0;
@Override
public void destroy() {
super.destroy();
System.out.println("destroy " + this.getClass().getName());
}
@Override
public void init() {
// TODO Auto-generated method stub
super.init();
panel = new JPanel();
panel.addMouseListener(this);
panel.addMouseMotionListener(this);
panel.setBackground(Color.YELLOW);
add(panel);
}
@Override
public void start() {
super.start();
}
@Override
public void stop() {
super.stop();
}
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
if (SwingUtilities.isRightMouseButton(e)) {
Graphics g = panel.getGraphics();
g.setColor(panel.getBackground());
g.drawLine(xa, ya, xe, ye);
}
xa = e.getX();
ya = e.getY();
}
@Override
public void mouseReleased(MouseEvent e) {
if (SwingUtilities.isLeftMouseButton(e)) {
Graphics g = panel.getGraphics();
g.setColor(Color.CYAN);
g.drawLine(xa, ya, xe, ye);
}
}
@Override
public void mouseDragged(MouseEvent e) {
if (SwingUtilities.isLeftMouseButton(e)) {
Graphics gc=panel.getGraphics().create();
try {
gc.setColor(panel.getBackground());
gc.drawLine(xa, ya, xe, ye);
xe = e.getX();
ye = e.getY();
gc.setColor(Color.GREEN);
gc.drawLine(xa, ya, xe, ye);
} finally {
gc.dispose();
}
}
;
}
@Override
public void mouseMoved(MouseEvent arg0) {
// TODO Auto-generated method stub
}
}
Frage 1:
Das Problem ist hat vermutlich mehr mit Graphics zutun.
Wieso gibt es immer diesen "radier Effekt" wenn ich bei gedrückter Maustaste eine Linie temporär zeichen.
Wenn ich auf dem selben Graphics Obejekt hab ich es verstanden. Aber wieso ist das der Fall wenn ich das jetzt wie bei mir (in MouseDragged) mit einer Kopie mache?
Ich hätte erwartet, dass die alten Linien zumindesten nach gc.dispose() wieder auftauchen.
Frage 2:
wieso bekommt man NullpointerExceptions wenn ich, anstatt jedes mal neu die Graphics-Instanz zu holen, Graphics g als Klassenvariable deklariere und diese dann in der init()-Methode einmal setze?
Danke im Vorraus