A
Astrid
Gast
Hallo,
ich möchte auf einer Malfläche gezeichnete Punkte automatisch durch eine Linie verbinden lassen.
Die Punkteerzeugung klappt, mir ist aber nicht ganz klar wie man über Arrays und drawLine bzw drawPloyLine die bereits gezeichneten Punkte verbinden kann. Bisher hab ich versucht jeweils ein Array dür die Punktkoordinaten und ein Array für die Linienkoordinaten zu erzeugen und dies bei einem Mouseevent (gezeichnter Punkt) ineinander zu übergeben.
Irgendwie klappt es nicht - Was mache ich flasch?
Hier der Code - danke im vorraus!
-----------------------------------------------------------------------------------------------------------------------------------------
Edit von L-ectron-X: Codetags eingefügt.
ich möchte auf einer Malfläche gezeichnete Punkte automatisch durch eine Linie verbinden lassen.
Die Punkteerzeugung klappt, mir ist aber nicht ganz klar wie man über Arrays und drawLine bzw drawPloyLine die bereits gezeichneten Punkte verbinden kann. Bisher hab ich versucht jeweils ein Array dür die Punktkoordinaten und ein Array für die Linienkoordinaten zu erzeugen und dies bei einem Mouseevent (gezeichnter Punkt) ineinander zu übergeben.
Irgendwie klappt es nicht - Was mache ich flasch?
Hier der Code - danke im vorraus!
-----------------------------------------------------------------------------------------------------------------------------------------
Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class Cpzeich extends JFrame
{
CFlaeche2 flaecheNeu2; // Fläche für Darstellung der Funktionen
int[] xPoints = new int[1000]; // x-Koordinaten Linie
int[] yPoints = new int[1000]; // y-Koordinaten Linie
int nPoints = 0; // Anzahl Punkte
int [] m_Xpos = new int[1000]; // Mausposition
int [] m_Ypos = new int[1000];
int auswahl = 0;
// AUSGABE HAUPTPROGRAMM--------------------------------------------------------
public static void main (String[] args)
{
Cpzeich test2 = new Cpzeich("Punktezeichner");
test2.pack();
test2.setSize(450,500);
test2.setResizable(false);
test2.show();
}
//KONSTRUKTOR-------------------------------------------------------------------
Cpzeich(String titel)
{
super(titel);
// Layout
getContentPane().setLayout(new FlowLayout());
// Malflaeche integrieren
flaecheNeu2 = new CFlae[che2();
getContentPane().add(flaecheNeu2);
// Schalter für Punkteingabe
JButton Bu7 = new JButton("Punktfolge eingeben ...");
getContentPane().add(Bu7);
// Listenerklasse für Schliessen des Fensters anlegen;
class CLauscher1 extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
// Event.Handeling für Schalter anlegen
class CActionLauscher implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
String label;
label = e.getActionCommand();
if (label.equals("Punktfolge eingeben ..."))
{
auswahl = 1; // verweis auf Punkteingabe
}
}
}
// Listener-Objekte anlegen
Bu7.addActionListener(new CActionLauscher());
addWindowListener(new CLauscher1());
}
// Zeichenfläche----------------------------------------------------------
class CFlaeche2 extends Canvas
{
int i= 0;
// Innerere Klasse von CFlaeche 2 zum Abfangen der Mausklicks
class CMeinMausAdapter extends MouseAdapter
{
public void mousePressed(MouseEvent e)
{
// Die aktuelle Position der Maus merken und im Array für Punktkoordinaten abspeichern
m_Xpos[i+1] = e.getX();
m_Ypos[i+1] = e.getY();
// Malfläche aktualisieren
repaint();
//Kontrolle
System.out.println("X:" + m_Xpos[i+1] );
System.out.println("Y:" + m_Ypos[i+1] );
// ArraY hinzufügen
int [] xPoints = {m_Xpos[i],m_Xpos[i+1]};
int [] yPoints = {m_Ypos[i],m_Ypos[i+1]};
}
}
//Konstruktor der Zeichenfläche
CFlaeche2()
{
setBackground(Color.white);
setForeground(Color.green);
addMouseListener(new CMeinMausAdapter());
}
//Paint-Methode------------------------------------------------------------------------------
public void paint(Graphics g)
{
//g.drawLine(10,10,100,100);
if (auswahl == 1)
{
//Punkt bzw Pixel zeichnen
g.setColor(Color.blue);
// Koordinaten x,y ; Briete/Hühe; Durchmesser
g.drawRoundRect(m_Xpos[i+1], m_Ypos[i+1], 10, 10, 10, 10 );
g.fillRoundRect(m_Xpos[i+1], m_Ypos[i+1], 10, 10, 10 ,10);
}
g.drawPolyline(xPoints, yPoints,10);
//g.drawPolyline(m_Xpos, m_Ypos,10);
}
// Fenstergrössen
public void update(Graphics g)
{
paint(g);
}
public Dimension getMinimumSize()
{
return new Dimension(400,400);
}
public Dimension getPreferredSize()
{
return getMinimumSize();
}
}
}
Edit von L-ectron-X: Codetags eingefügt.