JPanel Zeichnung verschwindet

  • Themenstarter Themenstarter onlymyjava
  • Beginndatum Beginndatum
O

onlymyjava

Gast
Hi, ich brauche ein JPanel in dem man etwas auf primitivste Weise zeichnen kann. Einfach so wie mit dem Paintstift.
Ich habe etwas erstellt das exakt meinen Anforderungen entspricht. Dummerweise wirds aber beim repainten (minimieren des Fenster etc.) gelöscht.

Hab kein Plan wie ich das anders umsetzen soll.

Java:
		private class Zeichenpanel extends JPanel {
			
			int x = 0;
			int y = 0;
			
			Zeichenpanel() {
				addMouseMotionListener(new MouseMotionAdapter(){
					public void mouseDragged(MouseEvent e) {
						getGraphics().drawLine(x,y,e.getX(),e.getY());
						x = e.getX();
						y = e.getY();
					}
				});
				addMouseListener(new MouseAdapter() {
					public void mousePressed(MouseEvent e) {
						x = e.getX();
						y = e.getY();
					}
				});
			}
			
			public void paintComponent(Graphics g) {
				super.paintComponent(g);
			}
		}
 
Java:
import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.Line2D;
import java.util.ArrayList;
import java.util.List;

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


public class TestFrame extends JFrame{

	public TestFrame(){
		super("test");
		add(new ZeichenPanel(), BorderLayout.CENTER);
		setSize(400,400);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
	
	public static class ZeichenPanel extends JPanel{
		
		List<Shape> shapes = new ArrayList<Shape>();
		private Line2D currentShape;
		
		
		public ZeichenPanel(){
			addMouseListener(new MouseAdapter() {
			});
			addMouseMotionListener(new MouseAdapter() {
			});

		}
		@Override
		public void paintComponent(Graphics g) {
			super.paintComponent(g);
			Graphics2D graphics2d = (Graphics2D) g;
			
			for(Shape shape: shapes){
				graphics2d.draw(shape);	
			}
			
		}
		
		@Override
		protected void processMouseEvent(MouseEvent e) {
			super.processMouseEvent(e);
			
			if(e.getID() == MouseEvent.MOUSE_PRESSED){
				currentShape = new Line2D.Double(e.getX(), e.getY(), e.getX(),  e.getY());
				shapes.add(currentShape);
			}

		}
		
		@Override
		protected void processMouseMotionEvent(MouseEvent e) {
			super.processMouseMotionEvent(e);

			if(e.getID() == MouseEvent.MOUSE_DRAGGED){
				currentShape.setLine(currentShape.getX1(), currentShape.getY1(), e.getX(),e.getY());
				repaint();
			}
		}
	}
	
	
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			
			@Override
			public void run() {
				TestFrame testFrame = new TestFrame();
				testFrame.setVisible(true);
			}
		});
	}

}
 
Vielen Dank, Problem gelöst.
Hab zwar etwas gebraucht um es so hinzukriegen wie ich es wollte, aber es funktioniert 🙂
 

Neue Themen


Zurück
Oben