paintComponent nicht aufgerufen

KingOfExceptions

Bekanntes Mitglied
Hey @ all,

ich wollte ein programm schreiben das eine linie zeichnet. dazu klickt man im frame zwei stellen an und daraus soll dann die linie gezeichnet werden. aber leider wird die paint methode nicht aufgerufen... hat da jemand ne idee wieso nicht?

Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
 
public class Pos extends JFrame implements MouseListener
{

	private static final long serialVersionUID = 1L;
	int x1=0;
	int y1=0;
	int x2=0;
	int y2=0;
	int zaehler=1;
	int tomate;
	
	Rectangle rec=new Rectangle(x1,y1,WIDTH,1);
	
	
	Pos()
	{
		JFrame frame=new JFrame();
		frame.setSize(500,500);
		frame.addMouseListener(this);
		frame.setVisible(true);
	}

	public static void main(String []args)
	{
		new Pos();
	}
	
	public void mouseClicked(MouseEvent e) 
	{
		if(zaehler==1)
		{
			PointerInfo a = MouseInfo.getPointerInfo();
			Point point = new Point(a.getLocation());
			SwingUtilities.convertPointFromScreen(point, e.getComponent());
			x1=(int) point.getX();
			y1=(int) point.getY();
			System.out.print("von "+x1+";"+y1);
			zaehler=2;
			repaint();
		}
		
		else
		{
			PointerInfo a = MouseInfo.getPointerInfo();
			Point point = new Point(a.getLocation());
			SwingUtilities.convertPointFromScreen(point, e.getComponent());
			x2=(int) point.getX();
			y2=(int) point.getY();
			System.out.println(" bis "+x2+";"+y2);
			zaehler=1;
			rec.width=x2-x1;
			repaint();
		}
		
		
		
	}

	public void paintComponent(Graphics g)
	{
		g.setColor(Color.black);
		g.fillRect(rec.x,rec.y,rec.width,1);
	}		  
	
	@Override
	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mousePressed(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseReleased(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}
}
 
Zuletzt bearbeitet:
Also da ist einiges komisch.. Erstmal zeichnest du keine Linie, sondern ein Rechteck. Das funktioniert so vllt auch mit waagrechten und senkrechten Linien, aber nicht mit Diagonalen. Ich hab ehrlich gesagt nich so Lust mir zu überlegen was da an der Logik nicht stimmen könnte, und ob die paintComponent wirklich nicht aufgerufen wird oder nur dein komisches Rechteck nicht angezeigt wird 😉

Aber mal grundsätzlich ein Vorschlag, aus dem du vllt bisschen was lernen kannst:

Java:
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.RenderingHints;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

@SuppressWarnings("serial")
public class LineDraw extends JPanel {

	private Point p1;
	private Point p2;

	{
		/* Init-Block & anonyme Klasse: */
		addMouseListener(new MouseAdapter() {
			@Override
			public void mousePressed(MouseEvent e) {
				if (p1 == null) {
					/* Setze ersten Punkt */
					p1 = e.getPoint();
				} else {
					if (p2 == null) {
						/* Setze zweiten Punkt */
						p2 = e.getPoint();
					} else {
						/* Lösche zweiten Punkt, und setze ersten */
						p1 = e.getPoint();
						p2 = null;
					}
				}
				/* Neu zeichnen */
				repaint();
			}
		});
	}

	@Override
	protected void paintComponent(Graphics g) {
		/* Lösche altes Bild */
		super.paintComponent(g);

		/* Weichere Liniendarstellung: */
		Graphics2D g2 = (Graphics2D) g;
		g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
				RenderingHints.VALUE_ANTIALIAS_ON);

		/* Zeichne Linie, falls beide Punkte gesetzt */
		if (p1 != null && p2 != null) {
			g.drawLine(p1.x, p1.y, p2.x, p2.y);
		}
	}

	public static void main(String[] args) {
		/* GUI sollte auf EDT starten: (auch das ist anonyme Klasse) */
		SwingUtilities.invokeLater(new Runnable() {
			@Override
			public void run() {
				JFrame frame = new JFrame();
				/* Beende Programm beim Schließen des Fensters: */
				frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

				/* Füge Panel hinzu: */
				frame.add(new LineDraw());
				frame.setSize(500, 500);

				/* Zentriere Fenster auf Desktop: */
				frame.setLocationRelativeTo(null);
				frame.setVisible(true);
			}
		});
	}
}
 

Neue Themen


Zurück
Oben