JPanel: Zeichnen funktioniert nicht - Nur grauer Hintergrund

Status
Nicht offen für weitere Antworten.

AlexDozer

Aktives Mitglied
Hi, ich soll ein Programm schreiben was Linien zeichnet wenn man die Maus drückt. Also vom letzten Mausklick zum aktuellen Mausklick.

Im Prinzip nicht schwer. Mein Problem ist jetzt das das JPanel nach überschreiben der paintComponent-Methode grau ist und nichts passiert. Wenn ich die Methode weglasse ist es schwarz wie im Konstruktor definiert.

Was mache ich falsch?
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Punkte extends JPanel {
	
	public class Maus extends MouseAdapter {
		
		public void mousePressed (MouseEvent e)  {
			
			x2 = e.getX();
			y2 = e.getY();
						
			repaint();
		}
	}
			
	public int x1,x2,y1,y2 = 0;
		
	Punkte () {
		
		setBackground(Color.black);
		setForeground(Color.yellow);
	}
		
	public static void main(String [] args) {
		
		Punkte meinePunkte = new Punkte();
		
		JFrame frame = new JFrame("Punkte verbinden");
			
		frame.setSize(500, 500);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.add(meinePunkte);
		frame.setVisible(true);
	}
	
	public void paint(Graphics g){
				
		g.drawLine(x1, y1, x2, y2);
		x1=x2;
		y1=y2;
	
	}
}

Schon mal vielen Dank im Voraus!


Gruß Alex
 
S

SlaterB

Gast
Code:
public class Punkte
    extends JPanel
{

    public class Maus
        extends MouseAdapter
    {
        public void mousePressed(MouseEvent e)
        {
            System.out.println("geht");
            x1 = x2; // !!!<-----------------
            y1 = y2;
            x2 = e.getX();
            y2 = e.getY();

            repaint();
        }
    }

    public int x1, x2, y1, y2 = 0;

    Punkte()
    {
        addMouseListener(new Maus()); // !!!<-----------------
        setBackground(Color.black);
        setForeground(Color.yellow);
    }

    public static void main(String[] args)
    {

        Punkte meinePunkte = new Punkte();

        JFrame frame = new JFrame("Punkte verbinden");

        frame.setSize(500, 500);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(meinePunkte);
        frame.setVisible(true);
    }

    public void paint(Graphics g)
    {
        super.paint(g);  // !!!<-----------------
        g.drawLine(x1, y1, x2, y2);


    }
}
 

doctus

Bekanntes Mitglied
1. die zu überschreibende methode ist paintComponent, nicht paint
2. im konstruktor addMouseListener(new Maus()); aufrufen, sonst kommen MouseEvents nicht an.

lg doctus
 

AlexDozer

Aktives Mitglied
Vielen Dank euch erstmal. Hab das ganze jetzt mal geändert.

Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Punkte extends JPanel {
	
	public class Maus extends MouseAdapter {
		
		public void mousePressed (MouseEvent e)  {
			x1 = x2;
            y1 = y2;
            x2 = e.getX();
			y2 = e.getY();
						
			repaint();
		}
	}
			
	public int x1,x2,y1,y2 = 0;
		
	Punkte () {
		addMouseListener(new Maus()); 
		setBackground(Color.black);
		setForeground(Color.yellow);
	}
		
	public static void main(String [] args) {
		
		Punkte meinePunkte = new Punkte();
		
		JFrame frame = new JFrame("Punkte verbinden");
			
		frame.setSize(500, 500);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.add(meinePunkte);
		frame.setVisible(true);
						
	}
	
	protected void paintComponent(Graphics g){
		
		super.paint(g);
		g.drawLine(x1, y1, x2, y2); 
		
		
	}
}

Jetzt bringt er mir aber ne Exception: #

Code:
at Punkte.paintComponent(Punkte.java:42)
	at javax.swing.JComponent.paint(Unknown Source)

Wieso kennt er die Quelle nicht?
 
S

SlaterB

Gast
weil du den Source-Code der Java-API nicht eingebunden hast,

-----

so erzeugst du eine Endlosschleife,
wenn du paintComponent() überschreibst, dann selbstverständlich
super.paintComponent(g);
aufrufen
 

AlexDozer

Aktives Mitglied
Vielen Dank! Es funktioniert :)

Es wird zwar jedesmal der alte Strich gelöscht aber das liegt wahrscheinlich daran das ich ja jedesmal die paintComponent-Methode der Elternklasse aufrufe. Da werd ich noch ne If-Abfrage einbauen müssen. Oder geht das eleganter?

Gruß Alex
 

AlexDozer

Aktives Mitglied
Hab es so gelöst:

Code:
		if (x1 == 0 && y1 == 0)
			super.paintComponent(g);
 
S

SlaterB

Gast
einfach über den vorherigen Zustand überzumalen ist nie eine gute Idee,
wer weiß was da zwischendurch passiert, Überdeckung durch andere Fenster usw.

zwei Wege:
1.)
alle Striche in einer Liste merken und jedes Mal Bild von Anfang an neu aufbauen
2.)
auf ein Image malen und auf dem Bildschirm immer das Image zeichen,
da geht das sukzessive Zeichnen, da kann dir niemand dazwischenfunken
und jedes normale paint ist korrekt vollständig (es wird das ganze Image auf den Bildschirm gemalt)

erfordert natürlich höhere Kenntnisse
 

AlexDozer

Aktives Mitglied
Alles klar. Werd ich mal probieren.

Ich hab das ganze jetzt nochmal mit Canvas versucht. Hier wird ja anscheinend immer das Canvas komplett neu gezeichnet d.h. die alten Striche werden immer entfernt. Ist es hier möglich dies zu unterbinden oder komme ich hier an die von dir genannten Methoden nicht vorbei?
 

AlexDozer

Aktives Mitglied
Habs selber herausgefunden. Man muss die Methode update() von Canvas überschreiben. Dann wird nicht jedesmal alles neu gezeichnet:

Code:
	public void update (Graphics g){
		paint(g);
	}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D JPanel mehrere Formen zeichnen Java Basics - Anfänger-Themen 5
gamebreiti Methoden JPanel nach clearAll() und add neu zeichnen Java Basics - Anfänger-Themen 1
F zeichnen in JPanel Java Basics - Anfänger-Themen 7
H Zeichnen in JPanel Java Basics - Anfänger-Themen 8
K Auf JPanel Zeichnen Java Basics - Anfänger-Themen 8
D Wie kann meine Klasse in ein JPanel zeichnen? Java Basics - Anfänger-Themen 14
B In einem JPanel zeichnen (Problem inerhalb eines Spieles) Java Basics - Anfänger-Themen 4
B Hindergrundfarbe in JPanel und Dreieck zeichnen Java Basics - Anfänger-Themen 4
F Hilfe beim Zeichnen in JPanel Java Basics - Anfänger-Themen 2
richis-fragen Optisch JPanel BorderLayout vertikaler Rand dicker als horizontaler Rand Java Basics - Anfänger-Themen 4
N Klassen Hintergrundfarbe in JPanel ändert sich nicht Java Basics - Anfänger-Themen 3
J JSON mit einem JPanel Java Basics - Anfänger-Themen 3
J Ein mit UI-Designer erstelltes JPanel einblenden Java Basics - Anfänger-Themen 0
J Eine theoretische Frage zur Praxis - JPanel oder Canvas Java Basics - Anfänger-Themen 5
J Beim Start des Programms zB. eine Linie in JPanel ausgeben Java Basics - Anfänger-Themen 4
C mehrere JPanel in ein JFrame bringen Java Basics - Anfänger-Themen 9
M HILFE JPanel - Graphics Java Basics - Anfänger-Themen 1
B Scrollbares Fenster (JScrollPane) mit JPanel scrollt nicht Java Basics - Anfänger-Themen 3
Zeppi JPanel responsive Grid Java Basics - Anfänger-Themen 0
J JPanel in JScrollPanel Java Basics - Anfänger-Themen 4
Elyt JPanel als HintergrundBild Java Basics - Anfänger-Themen 7
W 2 JPanel in einem JFrame Java Basics - Anfänger-Themen 4
B Wie kann man an ein JPanel eine Scrollbar anheften? Java Basics - Anfänger-Themen 8
O Swing JPanel Java Basics - Anfänger-Themen 4
CptK Klassen JPanel nach Ablauf der Spielzeit neuladen Java Basics - Anfänger-Themen 2
S JPanel wird nicht angezeigt Java Basics - Anfänger-Themen 1
D Animation JPanel Java Basics - Anfänger-Themen 1
M JLabels "verrutschen" beim übergeben von JPanel Java Basics - Anfänger-Themen 2
D Auf angeklicktes JPanel zugreifen Java Basics - Anfänger-Themen 5
D JPanel passt die Größe nicht an Java Basics - Anfänger-Themen 22
Y Webinhalt JPanel Java Basics - Anfänger-Themen 6
D Erste Schritte JPanel verschiebt Fenster via setVisible Java Basics - Anfänger-Themen 5
Dechasa Interface JFrame mit mehreren Übereinander liegenden JPanel Java Basics - Anfänger-Themen 5
S JPanel variablenabhängig erstellen Java Basics - Anfänger-Themen 13
J Methoden Dinge auf einem JPanel paltzieren Java Basics - Anfänger-Themen 1
Z JPanel wird zweimal hinterinander gezeichnet.. Wieso? Java Basics - Anfänger-Themen 4
F JFrame resize verschiebt JPanel Java Basics - Anfänger-Themen 3
A altes JPanel entfernen und neues öffnen Java Basics - Anfänger-Themen 5
I A0-Format in jpanel anzeigen Java Basics - Anfänger-Themen 1
R NullPointerException wegen JPanel oder doch nicht ? Java Basics - Anfänger-Themen 7
J Probleme mit eigenem JPanel (IDE Eclipse) Java Basics - Anfänger-Themen 4
S JPanel wird versetzt auf JFrame gelegt Java Basics - Anfänger-Themen 2
V jab ich eclipse verrückt gemacht :D ? array Jpanel, Jlabel Grafik Fehler / Frage Java Basics - Anfänger-Themen 5
R Focus auf JPanel im Thread Java Basics - Anfänger-Themen 9
I Problem mit JPanel Java Basics - Anfänger-Themen 0
B JPanel ändert die Hintergrundfarbe nicht Java Basics - Anfänger-Themen 2
F Threads funktionieren auf JPanel nicht Java Basics - Anfänger-Themen 1
C JPanel in MessageDialog Java Basics - Anfänger-Themen 1
B JPanel/JFrame in ein Applet umwandeln (Webfähig) Java Basics - Anfänger-Themen 7
S Inhalt von JPanel erst nach Resize sichtbar Java Basics - Anfänger-Themen 2
M Listener einerm JPanel hinzufuegen Java Basics - Anfänger-Themen 3
S vom JPanel aus durch Mouselistener Internet aufrufen Java Basics - Anfänger-Themen 6
Z JPanel bleibt leer Java Basics - Anfänger-Themen 2
E Bild per Verzeichnis/JFileChooser auf JPanel laden Java Basics - Anfänger-Themen 13
Q JPanel Java Basics - Anfänger-Themen 2
K Erste Schritte jpanel in einer klasse auslagern Java Basics - Anfänger-Themen 3
I Anfängerfrage JPanel repaint() Java Basics - Anfänger-Themen 6
N String auf JPanel bewegen Java Basics - Anfänger-Themen 6
K Erste Schritte Jframe Im Jpanel Java Basics - Anfänger-Themen 4
S Layout mit JPanel in JScrollPanel funktioniert nicht Java Basics - Anfänger-Themen 3
S JPanel drucken -> PrinterException Java Basics - Anfänger-Themen 2
B JPanel -JTable Java Basics - Anfänger-Themen 2
H JPanel Hintergrund transparent setzen? Java Basics - Anfänger-Themen 10
A Input/Output Hashmap in einem JPanel via JList anzeigen Java Basics - Anfänger-Themen 8
L zoomen aus jpanel Java Basics - Anfänger-Themen 7
P Bekomme in meinen JPanel nur eine JComponente angezeigt Java Basics - Anfänger-Themen 7
A Methoden repaint() zeichnet JPanel falsch Java Basics - Anfänger-Themen 3
R JFrame über einen JPanel Java Basics - Anfänger-Themen 5
I Veränderungen am JPanel vom JDialog aus Java Basics - Anfänger-Themen 6
F JPanel zu klein Java Basics - Anfänger-Themen 5
D GUI - Objekte in JPanel nach oben schieben Java Basics - Anfänger-Themen 2
S JPanel wird nicht eingefügt Java Basics - Anfänger-Themen 3
P Netbeans Platform - JLabel und JPanel setLocation Problem Java Basics - Anfänger-Themen 2
Kenan89 JPanel mit JTable Java Basics - Anfänger-Themen 9
I JPanel in JPanel Java Basics - Anfänger-Themen 2
A Zugriff auf Komponente innerhalb einer JPanel Java Basics - Anfänger-Themen 8
J Auf einem JPanel ein JFrame platzieren Java Basics - Anfänger-Themen 10
S JPanel anzeige Java Basics - Anfänger-Themen 2
propra Wie mache ich einem JPanel mein bereits instanziertes Model bekannt Java Basics - Anfänger-Themen 9
T Zugreifen auf JPanel Java Basics - Anfänger-Themen 4
K JPanel auslagern Java Basics - Anfänger-Themen 9
J Paint Methode von JPanel aufrufen Java Basics - Anfänger-Themen 15
T Tastendruck simulieren in JPanel Java Basics - Anfänger-Themen 3
P JPanel in JTable einfügen Java Basics - Anfänger-Themen 23
E Erste Schritte Objekte werden in JPanel angedockt und maximiert Java Basics - Anfänger-Themen 7
M Componenten auf JPanel anzeigen Java Basics - Anfänger-Themen 2
F JPanel als JPG - weisse Fläche Java Basics - Anfänger-Themen 9
L Image laden und auf jPanel ausgeben Java Basics - Anfänger-Themen 7
M JLabel auf JPanel positionieren Java Basics - Anfänger-Themen 8
M Verständnisfrage zu JPanel Java Basics - Anfänger-Themen 3
M MouseListener funkioniert auf JPanel nicht Java Basics - Anfänger-Themen 8
D JPanel + ein JLabel Java Basics - Anfänger-Themen 8
B JPanel-Oberfläche speichern Java Basics - Anfänger-Themen 9
X JTable in JPanel in JTabbedPane mouseevent von jtable kommt nicht durch Java Basics - Anfänger-Themen 3
P GUI, JPanel Java Basics - Anfänger-Themen 7
H JPanel in andere Klasse übergeben Java Basics - Anfänger-Themen 7
D Grösse eines JPanel hinsichtlich LayoutManager festlegen Java Basics - Anfänger-Themen 4
B JPanel über anderem JPanel Java Basics - Anfänger-Themen 6
F Unterschied JPanel und JFrame Java Basics - Anfänger-Themen 5
U JPanel dynamisch gestalten Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben