Salve a tutti ho un problemino in un programma java che sto facendo, sono alle prime armi, l'idea di base è fare un piccolo paint che disegni figure geometriche.Ho creato un JFrame e ho inserito dentro un Jpanel per disegnare,il problema è che se ridimensiono il JFrame con il mouse il disegno sparisce.
Sicuramente sarà una stupidata da niubbo cmq posto un pò di codice:
codice:
import java.awt.*;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Line2D;
import java.awt.geom.Rectangle2D;
import java.util.LinkedList;

import javax.swing.*;

public class Interface {
	PanPaint drawpan;
	
public Interface(){
	JFrame frame = new JFrame("Paint");
	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	frame.setSize(1300,800);
	frame.setVisible(true);
	drawpan = new PanPaint();
	JMenuBar bar = new JMenuBar();
	JMenu file = new JMenu("File");
	JMenuItem nuovo =new JMenuItem("Nuovo");
	JMenuItem apri = new JMenuItem("Apri");
	JMenuItem salva = new JMenuItem("Salva");
	JMenu shape = new JMenu("Figura");
	JMenuItem line = new JMenuItem("Linea");
	JMenuItem ellipse =new JMenuItem("Cerchio");
	JMenuItem square = new JMenuItem("Rettangolo");
	Open open= new Open(drawpan);
	Save save = new Save(drawpan);
	New pulisci = new New(drawpan);
	Line linea = new Line(drawpan);
	Rect rettangolo = new Rect(drawpan);
	Ellipse ellisse = new Ellipse(drawpan);
	salva.addActionListener(save);
	apri.addActionListener(open);
	nuovo.addActionListener(pulisci);
	line.addActionListener(linea);
	ellipse.addActionListener(ellisse);
	square.addActionListener(rettangolo);
	shape.add(line);
	shape.add(ellipse);
	shape.add(square);
	file.add(nuovo);
	file.add(apri);
	file.add(salva);
	bar.add(BorderLayout.EAST,file);
	bar.add(shape);
	frame.add(BorderLayout.NORTH,bar);
	frame.add(BorderLayout.CENTER,drawpan);
	
	
}


public static void main(String[] args){
	Interface interfaccia = new Interface();
	}
}
class PanPaint extends JPanel {
	private static final long serialVersionUID = 1L;
	public LinkedList<Shape> shapes;
	public Line2D linea;
	public Rectangle2D rect;
	public Ellipse2D ellipse;
	boolean repaintReq= false;
	
	public PanPaint(){
		shapes = new LinkedList<Shape>();
		setLayout(new BorderLayout());
	}
	
	public void draw(int x1,int y1,int x2, int y2,char a){
		switch(a) {
		case 'l':	linea = new Line2D.Double(x1,y1,x2,y2);
					shapes.addFirst(linea);
					repaintReq = true;
					repaint();
					break;
			
		case 'r':	rect = new Rectangle2D.Double(x1,y1,x2,y2);
					shapes.addFirst(rect);
					repaintReq = true;
					repaint();
			break;
			
		case 'e':	ellipse= new Ellipse2D.Double(x1,y2,x2,y2);
					shapes.addFirst(ellipse);
					repaintReq=true;
					repaint();
			break;
			}
	}
	public void paintComponent(Graphics g){
		super.paintComponents(g);
		Graphics2D g2=(Graphics2D) g;
		if(shapes.size()!=0)
		if(repaintReq){
			repaintReq = false; 
			g2.draw(shapes.getFirst());
		}
		else
			for(int i = 0; i==shapes.size();i++)
				g2.draw(shapes.get(i));
		
	}
	
}