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

Rispondi quotando
