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));
}
}