Frage zu drawLine

Status
Nicht offen für weitere Antworten.

smau

Mitglied
Hallo zusammen,

ich zeichne mit der Methode drawLine in ein Bild rein und rufe diese Methode mehrmals auf.

Mein Problem ist, dass die Linie immer oben links im Bild anfängt und am Ende auch dort endet. Wie kann man das umgehen, also das die Linie bei meinem ersten Punkt auch anfängt?

Danke schonmal im Voraus!
 

smau

Mitglied
Ich zeichne in ein Bild Punkte aus einem Array rein die mitten im Bild liegen mittels drawLine. Das funktioniert auch, jedoch startet und endet die Linie oben links im Bild immer.

Die soll aber an meinem ersten Punkt starten und an dem letzten enden.
 

hdi

Top Contributor
ich schätze du vergisst vor dem Neuzeichnen das alte Bild zu löschen:

Java:
protected void paintComponent(Graphics g){
    super.paintComponent(g); // <-- löscht die aktuelle Zeichnung
    // jetzt kannst du ne neue Linie malen
}

edit: Wenn es nicht daran liegt zeig doch bitte mal deinen Code (inkl. Inhalt des Arrays)
 

smau

Mitglied
Mein Quellcode sieht so aus:
Java:
Graphics2D g = (Graphics2D) bild.getGraphics();
                g.drawLine(x[0][i],y[i][0],x[0][i+1],y[i+1][0]);
                g2.dispose();
 

L-ectron-X

Gesperrter Benutzer
getGraphics() aufzurufen ist fast immer ein Fehler.
Etwas mehr vom Quellcode könnte helfen, das Problem zu beseitigen.
 

Michael...

Top Contributor
Was steckt denn in x[0] und y[0] und warum benutzt Du ein mehrfach verschachteltes Array?
verwendest Du eine Schleife oder stehen da nur die drei Zeilen in Deiner paint()
Lass Dir doch mal die Werte beim Zeichnen ausgeben.

Sehe gerade Du rufst getGraphics() auf - ist nicht umbedingt zu empfehlen. Eventuell packst Du mal das wesentliche in ein vollständiges Programm und postest dieses hier.
 

smau

Mitglied
In den Arrays stecken mehrere Werte die ich zeichne und mit dem nächsten Wert verbinde.
Java:
Graphics2D g = (Graphics2D) bild.getGraphics();
       
            for (int i = 0; i <= ende; i++) {
                g.drawLine(x[0][i],y[i][0],x[0][i+1],y[i+1][0]);
            }
        g.dispose();

EDIT: Dieser Quellcode ist in einer Methode geschrieben und diese Methode ruf ich mehrmals auf!
 
Zuletzt bearbeitet:

Michael...

Top Contributor
wieso? gibt es eine quelle mit plausibler erklärung, oder kannst du das kurz erläutern? habe das letztens nämlich auch genutzt und würde dann schon gerne wissen wollen, was daran schlecht ist ;/

Es besteht das Risiko, dass das Objekt zum Zeitpunkt des Methodenaufrufs nicht sichtbar ist und dann liefert getGraphics() null. Gilt aber glaube ich nur für Komponenten - bin da aber kein Fachmann

@smau falls Du ein BufferedImage verwendest: hier ruft man eher createGraphics() anstelle von getGraphics() auf
Zum Zeichnen selbst: Wenn ich das richtig verstehe zeichnest Du anhand von Koordinaten eine Polylinie!?!
Wenn dann würde ich die Punktkoordinaten in einem einfach Array ablegen und so zeichen:
Java:
int[] x = new int[]{10, 50, 20};
int[] y = new int[]{10, 30, 80};
for (int i = 0; i <=x.length ; i++) {
                g.drawLine(x[i], y[i] , x[i+1], y[i+1]);
}


[edit] ansonsten kann ich anhand des kurzen Quellcodes nicht viel dazu sagen, besser wäre ein komplettes Programm in Kurzform (KSKB)
 

Marco13

Top Contributor
wieso? gibt es eine quelle mit plausibler erklärung, oder kannst du das kurz erläutern? habe das letztens nämlich auch genutzt und würde dann schon gerne wissen wollen, was daran schlecht ist ;/


L-ectron-X's Hinweis bezog sich auf Components. Bei dem Aufruf [c]bild.getGraphics()[/c] kann man davon ausgehen, dass du das auf einem BufferedImage aufrufst, und dort ist das in Ordnung. Bei sowas wie [c]panel.getGraphics()[/c] (d.h. Aufruf auf einem JPanel o.ä.) würden die von Michael... angedeuteten Probleme auftreten.
 

smau

Mitglied
Es besteht das Risiko, dass das Objekt zum Zeitpunkt des Methodenaufrufs nicht sichtbar ist und dann liefert getGraphics() null. Gilt aber glaube ich nur für Komponenten - bin da aber kein Fachmann

@smau falls Du ein BufferedImage verwendest: hier ruft man eher createGraphics() anstelle von getGraphics() auf
Zum Zeichnen selbst: Wenn ich das richtig verstehe zeichnest Du anhand von Koordinaten eine Polylinie!?!
Wenn dann würde ich die Punktkoordinaten in einem einfach Array ablegen und so zeichen:
Java:
int[] x = new int[]{10, 50, 20};
int[] y = new int[]{10, 30, 80};
for (int i = 0; i <=x.length ; i++) {
                g.drawLine(x[i], y[i] , x[i+1], y[i+1]);
}


[edit] ansonsten kann ich anhand des kurzen Quellcodes nicht viel dazu sagen, besser wäre ein komplettes Programm in Kurzform (KSKB)

Mehr habe ich in der Methode nicht drinstehene, ausser den Kopf der Methode. Und ja ich benutze BufferedImage.

Ist es ein Unterschied, ob ich ein zweidimensionales Array benutze oder ein eindimensionales?
 

Michael...

Top Contributor
Ist es ein Unterschied, ob ich ein zweidimensionales Array benutze oder ein eindimensionales?
letzteres ist einfacher ;-)
[Ernsthaft] Verstehe nur nicht, was Du mit was Du da genau machst

Hier mal ein KSKB meinerseits, hab hier keine Linien die bei 0,0 starten oder enden. Eventuell hast Du ja in Deinem Array einen 0en drinstehen?
Java:
import java.awt.*;
import java.awt.image.*;
import javax.swing.*;

public class DrawImageDemo extends JFrame {
	public DrawImageDemo () {
		BufferedImage image = new BufferedImage(200, 200, BufferedImage.TYPE_INT_RGB);
		Graphics2D g = image.createGraphics();
		int[] x = new int[]{10, 25, 50, 75, 100, 125, 150, 175};
		int[] y = new int[]{10, 50, 30, 80, 80, 65, 85, 150};
		for (int i=1; i<Math.min(x.length, y.length); i++) 
			g.drawLine(x[i-1], y[i-1], x[i], y[i]);
		g.dispose();
		this.getContentPane().add(new JLabel(new ImageIcon(image)), BorderLayout.CENTER);
	}
	
	public static void main(String[] args) {
		JFrame frame = new DrawImageDemo();
		frame.setBounds(0, 0, 500, 300);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
}
PS: so schaut heute in etwa der Kursverlauf meiner Aktien aus;(
 

smau

Mitglied
Java:
g.drawLine(x[i-1], y[i-1], x[i], y[i]);

habe meine ersten Werte jetzt auch auf [i-1] gemacht und schon ist der Startpunkt richtig. Jetzt geht nur noch von meinem letzten Punkt aus eine Linie nach oben links.
 

Michael...

Top Contributor
Java:
g.drawLine(x[i-1], y[i-1], x[i], y[i]);

habe meine ersten Werte jetzt auch auf [i-1] gemacht und schon ist der Startpunkt richtig. Jetzt geht nur noch von meinem letzten Punkt aus eine Linie nach oben links.
Das müsste bei Deiner urspr. Schleife aber auf einen Fehler laufen, da Du ja bei i=0 anfängst?!?

Lass doch einfach mal in Deiner Schleife die Werte ausgeben, damit Du überhaupt mal siehst welche Koordinaten zum Zeichnen verwendet werden:
Java:
System.out.println("Linie von " + x[0][i] + "|" + y[i][0]  + " nach "  + x[0][i+1] + "|" + y[i+1][0]);
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Frage zum Schieberegler JSlider AWT, Swing, JavaFX & SWT 5
thor_norsk Java - Allgemeine - Frage AWT, Swing, JavaFX & SWT 14
thor_norsk Allgemeine Frage AWT, Swing, JavaFX & SWT 10
M Frage zu Java Bundesligaverwaltung AWT, Swing, JavaFX & SWT 7
thor_norsk Allgemeine Frage AWT, Swing, JavaFX & SWT 9
E Frage zum Textfeld AWT, Swing, JavaFX & SWT 8
H Swing JMenu aufgeklappt oder nicht - Wie frage ich das ab? AWT, Swing, JavaFX & SWT 5
pkm Frage wegen java.lang.IllegalStateException bei DocumentListener AWT, Swing, JavaFX & SWT 4
D Frage zu ActionListenern und AvtionEvents AWT, Swing, JavaFX & SWT 2
ralfb1105 JavaFX Daten zwischen Controllern austauschen- neue Frage AWT, Swing, JavaFX & SWT 7
F JavaFX Frage zum Logging AWT, Swing, JavaFX & SWT 6
E Prinzip: wie man Ereignisse in einer GUI verarbeit. Frage zum Design? AWT, Swing, JavaFX & SWT 10
ralfb1105 Swing Frage zu SwingWorker Verhalten bei cancel() AWT, Swing, JavaFX & SWT 2
J Frage zu setuserdata AWT, Swing, JavaFX & SWT 1
N Frage zu ListView AWT, Swing, JavaFX & SWT 11
L 2D-Grafik Frage zu Ellipse2D.Double, Abfrage, ob Punkt enthalten ist funktioniert nicht AWT, Swing, JavaFX & SWT 3
T Frage zu GUI - Button soll Objekt erfassen AWT, Swing, JavaFX & SWT 2
J Event Handling Frage zu der Funktion addActionListener AWT, Swing, JavaFX & SWT 2
J Frage zur objektorentierten Swing Programmierung AWT, Swing, JavaFX & SWT 10
T JavaFX Frage zum FX-Loader AWT, Swing, JavaFX & SWT 3
B drawRect Frage und Aufgabenstellung AWT, Swing, JavaFX & SWT 10
fLooojava GridLayout - Frage bezüglich Kachelgröße AWT, Swing, JavaFX & SWT 5
S Frage zu java.awt.EventQueue AWT, Swing, JavaFX & SWT 1
J Frage zu Java Projekt [2D Game] AWT, Swing, JavaFX & SWT 3
M Swing Grundlegende Frage zu SWING mit WindowBuilder AWT, Swing, JavaFX & SWT 11
M Frage zum Loggen von Fehlern AWT, Swing, JavaFX & SWT 3
T Swing API Frage zu Verzeichnisbäumen und JTree AWT, Swing, JavaFX & SWT 1
M Thread-Frage in SWT AWT, Swing, JavaFX & SWT 1
Q Cursor Frage AWT, Swing, JavaFX & SWT 8
W JavaFX TableView frage AWT, Swing, JavaFX & SWT 5
H Taschenrechnerprojekt in Javafx - Frage zu den Buttons in FXML AWT, Swing, JavaFX & SWT 1
I Grundsätzliche Frage zu ItemListener AWT, Swing, JavaFX & SWT 11
X Kurze Frage zu JPopup AWT, Swing, JavaFX & SWT 3
D Swing [Frage] ComboBox + Label AWT, Swing, JavaFX & SWT 3
D Frage zu JFrame und Graphics AWT, Swing, JavaFX & SWT 4
J Swing Frage zur Vorgehensweise (JTable?, JLabels?) AWT, Swing, JavaFX & SWT 8
S Frage zu Jtable / CellEditor AWT, Swing, JavaFX & SWT 1
kaoZ Frage zum einfügen von Componenten AWT, Swing, JavaFX & SWT 14
N Swing JTable anfänger frage AWT, Swing, JavaFX & SWT 2
S GridBagLayout-Frage AWT, Swing, JavaFX & SWT 1
V 2D-Grafik Frage zum Graphics Objekt AWT, Swing, JavaFX & SWT 2
F Swing JComboBox - Frage zur Größe AWT, Swing, JavaFX & SWT 11
G noch eine Frage zum EventDispachThread AWT, Swing, JavaFX & SWT 4
D MVC Frage AWT, Swing, JavaFX & SWT 6
Z Flackern trotz Offscreen Image / Doublebuffer, (+ Frage zu Pixelvergleich) AWT, Swing, JavaFX & SWT 25
GianaSisters 2D-Grafik BufferedImage.getSubimage - Frage AWT, Swing, JavaFX & SWT 7
M Frage zu KeyListener bzgl. JApplet AWT, Swing, JavaFX & SWT 3
M Frage zu Threads AWT, Swing, JavaFX & SWT 3
N Swing JComboBox Frage AWT, Swing, JavaFX & SWT 5
Luk10 g.drawString funktioniert nicht + Frage zur Text-Rendering Qualität AWT, Swing, JavaFX & SWT 7
Luk10 Frage zu Farb-Komposition AWT, Swing, JavaFX & SWT 9
K Gui Layout Frage AWT, Swing, JavaFX & SWT 5
V SWT Import Wizard - frage zur WizardPage AWT, Swing, JavaFX & SWT 5
N Swing Frage JXMapviewer AWT, Swing, JavaFX & SWT 4
GUI-Programmer Wieder ne Layout Frage AWT, Swing, JavaFX & SWT 11
GUI-Programmer LayoutManager Kurze Layout Frage - eine komponente mittig? AWT, Swing, JavaFX & SWT 5
lumo SWT Zeichnen bescheunigen bzw eine allg. Frage AWT, Swing, JavaFX & SWT 8
H Frage zu übergebenem Vector bzw. Boolean AWT, Swing, JavaFX & SWT 3
C 2D-Grafik BufferedImage laden, Frage zum Code AWT, Swing, JavaFX & SWT 2
VfL_Freak Swing Frage zu "new JPasswordField( 10 )" AWT, Swing, JavaFX & SWT 6
H Frage zu WindowBuilder Pro AWT, Swing, JavaFX & SWT 3
C Frage/Problem mit Jpanel AWT, Swing, JavaFX & SWT 4
S Frage zu TextArea AWT, Swing, JavaFX & SWT 2
GUI-Programmer Zeichnen in Swing - Frage AWT, Swing, JavaFX & SWT 6
Luk10 Frage zu Mouseevents AWT, Swing, JavaFX & SWT 7
J Refreshing Swing Frage AWT, Swing, JavaFX & SWT 10
F Frage zu Event KeyTyped bei jPanel AWT, Swing, JavaFX & SWT 4
A Frage zu StringBuilder AWT, Swing, JavaFX & SWT 2
S allg. Frage zur GUI-Architektur AWT, Swing, JavaFX & SWT 5
A Frage zu JDialog AWT, Swing, JavaFX & SWT 3
A Frage zur Methode matches() AWT, Swing, JavaFX & SWT 2
P LayoutManager Verständnis-Frage GridBagLayout AWT, Swing, JavaFX & SWT 7
H Allgemeine Frage zu Grafikfähigkeiten von Java AWT, Swing, JavaFX & SWT 24
D Repaint Frage, Design Frage AWT, Swing, JavaFX & SWT 2
Jats Frage zu JLabel & JTextField AWT, Swing, JavaFX & SWT 4
Y frage zu BufferedImage AWT, Swing, JavaFX & SWT 7
hdi Swing Frage zu invokeAndWait() Exceptions AWT, Swing, JavaFX & SWT 8
P Swing Frage zu paintComponent/getGraphics AWT, Swing, JavaFX & SWT 4
M Frage nach Swing Element AWT, Swing, JavaFX & SWT 3
S Frage zu Graphics2D AWT, Swing, JavaFX & SWT 3
T AWT Frage zu AWT AWT, Swing, JavaFX & SWT 5
B Frage zu Swing,Threads, SwingWorker und Socket Communikation AWT, Swing, JavaFX & SWT 4
F unspezifizierte Frage zu JTable/ Model AWT, Swing, JavaFX & SWT 6
B SWT Frage zu MVC und Data-Binding AWT, Swing, JavaFX & SWT 8
T LookAndFeel Look and Feel Frage AWT, Swing, JavaFX & SWT 2
J Java2D Kreis/Kurven Frage AWT, Swing, JavaFX & SWT 2
P Kurze Frage zur Gestaltung eines vertikalen Menüs AWT, Swing, JavaFX & SWT 2
Dit_ Frage zum Thema SwingUtilities.invokeLater AWT, Swing, JavaFX & SWT 5
Eldorado Frage zur Anwendung des MVC-Konzept AWT, Swing, JavaFX & SWT 33
G Frage zu processMouseEvent AWT, Swing, JavaFX & SWT 6
M Zoomen in ein JPanel... und eine andere kleine Frage AWT, Swing, JavaFX & SWT 3
D Swing implementierungs-technische Frage zu JList/AbstractListModel AWT, Swing, JavaFX & SWT 7
C Event Frage AWT, Swing, JavaFX & SWT 7
A Frage zu GridLayout AWT, Swing, JavaFX & SWT 4
F Frage zu WindowListeners AWT, Swing, JavaFX & SWT 2
E einfache Frage:warum ist Hintergrund grau ? AWT, Swing, JavaFX & SWT 24
E einfache Frage zu paintComponent und Graphics AWT, Swing, JavaFX & SWT 7
C Frage zu ActionListenern AWT, Swing, JavaFX & SWT 7
D Frage @ someActionEvent.getActionCommand() AWT, Swing, JavaFX & SWT 2
Kr0e Allgemeine Frage zu Java2D (Eigene Impl.) AWT, Swing, JavaFX & SWT 18

Ähnliche Java Themen


Oben