Moin,
so, nachdem ich nun schon eine Weile erfolglos herumfrickele, vielleicht kann mich ja hier jemand erhellen:
Also folgende Ausgangslage:
Ich lese eine Datei ein. In dieser Datei befinden sich Punktkoordinaten für mehrere Linien. Nun möchte ich von der Gui, in der über einen JButton die Datei bzw. Werte eingelesen werden, einen weiteren Dialog oder Fenster öffnen und dort die Linien zeichnen. Ich finde jede Menge triviale Beispiele, in denen einfach eine Linie in der paint()- oder paintComponent()-Methode gezeichnet wird.
Nun zu meinen Fragen…
[ol]
[li]Wann und warum ist paint() sinnvoll, wann und warum paintComponent()?
[/li][li]Zeichnet man auf dem JFrame (habe Beispiele gesehen) oder JPanel, wenn ja, warum? g
[/li][li]Wie kann man eine Linie nach der nächsten zeichnen (in einer for-Schleife)? Hier stehe ich gerade am meisten auf dem Schlauch. Eine einfache Übergabe der Punktkoordinaten und dann a la plotFrame.drawLine(xValues, yValues, color) scheitert doch daran, dass zum Zeichnen paint()/paintComponent() benutzt werden muss?! Oder ist es eher sinnvoll, alle Linien in eine ArrayList zu speichern, diese an das plotFrame zu übergeben und alle Linien dann in der paint()/paintComponent() auf einen Schlag zeichnen zu lassen und nicht in der for-Schleife?
[/li][/ol]
Schliesslich noch ein bisschen Code meines jämmerlichen Versuchs, der
[ul]
[li]nur die zweite Linie zeichnet
[/li][li]beim Heraus- und wieder Hereinschieben des Fensters die Linien „verliert“
[/li][li]natürlich keine Schleife ist.
[/li][/ul]
Im Aufruf-Frame:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
ZeichnenFrame zeichnenFrame = new ZeichnenFrame();
zeichnenFrame.setVisible( true );
zeichnenFrame.drawPolygon(xKoordinaten, yKoordinaten, 1);
zeichnenFrame.drawPolygon(xKoordinaten2, yKoordinaten2, 3);
}
Und im Darstellungs-Frame:
void drawPolygon(int[] xKoordinaten, int[] yKoordinaten, int colorNumber) {
this.xKoordinaten = xKoordinaten;
this.yKoordinaten = yKoordinaten;
switch ( colorNumber ) {
case 1: theColor = Color.BLUE;
break;
case 2: theColor = Color.YELLOW;
break;
case 3: theColor = Color.RED;
break;
default: theColor = Color.GREEN;
break;
}
xKoordinaten.length);
repaint();
}
public void paint(Graphics graphics) {
if ( (xKoordinaten == null) || (yKoordinaten == null) ){
return;
}
super.paintComponents(graphics);
graphics.setColor(theColor);
graphics.drawPolygon(xKoordinaten, yKoordinaten, xKoordinaten.length);
}