Hallo,
ich habe vor einigen Tagen mit der Grafikprogrammierung begonnen. Jetzt wollte ich ein einfaches Programm zum Zeichnen von Freihandlinien schreiben. Das hat auch gut funktioniert bis ich auf folgendes Problem gestoßen bin:
Via Kontextmenü lässt sich ein JColorChooser-Dialog aufrufen, mit dem man die Linienfarbe ändern kann. Wenn ich jedoch dann weiterzeichnen will tritt ein unerwünschter Effekt auf:
Jetzt wären meine Fragen:
1.) Wieso tritt dieser Fehler auf?
2.) Wie kann ich diesen Fehler beheben?
Ich danke euch im Voraus für eure Hilfe!
lg
fabs04
ich habe vor einigen Tagen mit der Grafikprogrammierung begonnen. Jetzt wollte ich ein einfaches Programm zum Zeichnen von Freihandlinien schreiben. Das hat auch gut funktioniert bis ich auf folgendes Problem gestoßen bin:
Via Kontextmenü lässt sich ein JColorChooser-Dialog aufrufen, mit dem man die Linienfarbe ändern kann. Wenn ich jedoch dann weiterzeichnen will tritt ein unerwünschter Effekt auf:
Java:
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
public class Main extends JFrame{
Main(){
add(new Leinwand());
setSize(800, 600);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args){
new Main();
}
private class Leinwand extends JPanel{
JPopupMenu mnuKontext = new JPopupMenu();
JMenuItem mniFarbe = new JMenuItem("Farbe ändern...");
JColorChooser colorChooser = new JColorChooser();
Color farbe = new Color(0, 0, 0);
private ArrayList<Point> points = new ArrayList<>();
Leinwand(){
// Kontextmenü
mnuKontext.add(this.mniFarbe);
mniFarbe.addActionListener(new ListenAction());
addMouseListener(new MouseAdapter(){
@Override
public void mouseReleased(MouseEvent e){
if(e.isPopupTrigger()){
mnuKontext.show(Main.this, e.getX(), e.getY());
}
}
});
addMouseMotionListener(new MouseMotionAdapter(){
public void mouseDragged(MouseEvent e) {
points.add(new Point(e.getX(), e.getY()));
repaint();
}
});
addMouseListener(new MouseAdapter(){
@Override
public void mouseReleased(MouseEvent e){
points.add(null);
}
});
}
class ListenAction implements ActionListener{
@Override
public void actionPerformed(ActionEvent e){
if(e.getSource() == mniFarbe){
// Kontextmenü anzeigen
farbe = JColorChooser.showDialog(Main.this, "Farbe wählen...", farbe);
}
}
}
@Override
public void paintComponent(Graphics g){
g.setColor(farbe);
for(int i = 0; i < points.size(); i++){
if(i > 0 && points.get(i-1) != null && points.get(i) != null)
g.drawLine((int) points.get(i).getX(), (int) points.get(i).getY(), (int) points.get(i-1).getX(), (int) points.get(i-1).getY());
}
}
}
}
Jetzt wären meine Fragen:
1.) Wieso tritt dieser Fehler auf?
2.) Wie kann ich diesen Fehler beheben?
Ich danke euch im Voraus für eure Hilfe!
lg
fabs04
Zuletzt bearbeitet von einem Moderator: