Grüße!
Ich habe ein kleines Problem mit meiner Paint-Anwendung. Diese soll das Feature beinhalten, Freihandlinien durch das Drücken/Ziehen der Maus zu zeichnen. Vergleichbar mit dem Bleistift-Tool in dem Microsoft-Paint-Programm. Das Programmieren des besagten Features stellt sich für mich jedoch als schwierig heraus. Meine Idee war es, in der mouseDragged-Methode die X und Y Koordinaten in zwei Arrays zu speichern. Die paintComponent-Methode kann daraus dann eine polyLine zeichnen. Soweit funktioniert es wie es funktionieren soll. Wenn ich allerdings nach dem Loslassen der Maus eine zweite Linie zeichnen möchte, verbindet das Programm unwillentlich den letzten Punkt der vorangeganen polyLine mit dem ersten Punkt der neuen polyLine. Gibt es unter euch Profi-Hackern vielleicht jemanden, der mir da ein bisschen auf Sprünge helfen könnte?
Ich bedanke mich im Voraus für eure Hilfe!
Ich habe ein kleines Problem mit meiner Paint-Anwendung. Diese soll das Feature beinhalten, Freihandlinien durch das Drücken/Ziehen der Maus zu zeichnen. Vergleichbar mit dem Bleistift-Tool in dem Microsoft-Paint-Programm. Das Programmieren des besagten Features stellt sich für mich jedoch als schwierig heraus. Meine Idee war es, in der mouseDragged-Methode die X und Y Koordinaten in zwei Arrays zu speichern. Die paintComponent-Methode kann daraus dann eine polyLine zeichnen. Soweit funktioniert es wie es funktionieren soll. Wenn ich allerdings nach dem Loslassen der Maus eine zweite Linie zeichnen möchte, verbindet das Programm unwillentlich den letzten Punkt der vorangeganen polyLine mit dem ersten Punkt der neuen polyLine. Gibt es unter euch Profi-Hackern vielleicht jemanden, der mir da ein bisschen auf Sprünge helfen könnte?
Java:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.Graphics;
import java.awt.GridLayout;
class Malen2 extends JFrame implements ActionListener {
int x,y,x2,y2;
boolean drawL = false;
JButton line;
JPanel pan;
int [] pixelX = new int[10000];
int [] pixelY = new int[10000];
int i = 0; //"int i" wird erst in der mouseDragged Methode verwendet
// um Indexe für die beiden Arrays zu halten.
public static void main (String [] args) {
Malen frame = new Malen("Malen2");
frame.setVisible(true);
frame.setSize(400,400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public Malen2 (String str) {
super(str);
line = new JButton("Freihand");
line.setActionCommand("l");
line.addActionListener(this);
ZeichenPanel2 drawPanel = new ZeichenPanel2();
//drawPanel.setBackground(Color.BLACK);
pan = new JPanel();
pan.setLayout(new GridLayout(0,1,0,0));
pan.add(line);
add(pan, BorderLayout.NORTH);
add(drawPanel, BorderLayout.CENTER);
addMouseListener(new InMalen2());
addMouseMotionListener(new InMalen2());
//Insets inset = circle.getInsets();
//System.out.println(inset);
}
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("l")) {
drawL = true;
}
}
class InMalen2 extends MouseAdapter implements MouseMotionListener {
public void mousePressed(MouseEvent m) {
x = m.getX();
y = m.getY();
}
public void mouseDragged(MouseEvent m) {
x2 = m.getX();
y2 = m.getY();
if (drawL) { // Sollte der boolsche Wert "drawL" == true sein,
pixelX[i] = x2 - 8; // wird jede Veränderung der Mausposition bei
pixelY[i] = y2 - 56; // gedrückter Maustaste in diese zwei Arrays gespeichert.
i+= 1; // von x2 und y2 müssen noch festgelegt Werte subtrahiert
} // werden, damit die PolyLine nicht versetzt gezeichnet wird
}
}
class ZeichenPanel2 extends JPanel {
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.RED);
if (drawL) {
g.drawPolyline(pixelX, pixelY, i);
repaint();
}
}
}
}
Ich bedanke mich im Voraus für eure Hilfe!