Buonasera a tutti.
Chiedo scusa a tutti anticipatamente in quanto farò sicuramente degli errori nella formulazione della richiesta, essendo questo il mio primo intervento.
Il mio problema è che devo capire bene come diamine funzioni il disegno in Java...
Il progetto che devo sviluppare riguarda la possibilità di disegnare (tramite input manuale, non necessariamente dal click del mouse):
-linee
-rettangoli
-cerchi
I problemi che presenta il codice che segue sono molteplici:
1.Non riesco ancora bene a gestire l'inserimento delle coordinate dei punti che creano le tre figure sopracitate (linee, rettangoli, cerchi), ma questo è il problema minore, in qualche modo credo di riuscire a risolvere
2.Posso tracciare una sola istanza per tipologia di disegno (non devo avere questo limite)
3.La figura non compare subito, ma compare solo in seguito ad un ridmensionamento di FramePrincipale.
Se già mi poteste dare una mano per risolvere questi problemi 2 e 3 vi sarei molto grato.
Sicuramente sbaglio di fondo anche nel concepire diverse cose, criticatemi pure alla morte, son contento.
![]()
Buona serata a tutti!
P.s. (Non fateci caso, potrebbero esserci molti Import inutili, il codice è solo una prova)
codice://Import import javax.swing.Box; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Dimension; import java.awt.Graphics; import java.awt.GridLayout; import java.awt.MenuShortcut; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JOptionPane; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; //Codice import java.awt.image.BufferedImage; import java.io.FileOutputStream; import java.io.OutputStream; public class FramePrincipale { static JFrame p; //Finestra principale JMenuBar MenuBar; //Barra del menu principale //Menu File JMenu MenuFile; JMenuItem Apri; JMenuItem Nuovo; MenuShortcut n; JMenuItem Salva; MenuShortcut s; JMenuItem Esci; //Menu Edit JMenu MenuEdit; JMenuItem Annulla; MenuShortcut r; JMenuItem Ripristina; //Menu Disegno JMenu MenuDisegno; JMenuItem DisLinea; JMenuItem DisRettangolo; JMenuItem DisCerchio; //Menu Info JMenu MenuHelp; JMenuItem Info; MenuShortcut i; JMenuItem Help; static JPanel Disegno; static boolean esci,esci_ann; static //coordinate per il disegno int x; static int y; static int lxdx=100; static int lxsx=0; static int lydx=100; static int lysx=0; static int[] coo_linea_x; static int[] coo_linea_y; static int[] coo_rett_x; static int[] coo_rett_y; static int[] coo_cerchio_x; static int[] coo_cerchio_y; public FramePrincipale(){ //Creazione delle istanze coo_linea_x=new int[2]; coo_linea_y=new int[2]; coo_rett_x=new int[2]; coo_rett_y=new int[2]; coo_cerchio_x=new int[2]; coo_cerchio_y=new int[2]; //frame principale p=new JFrame(); //Barra dei menu MenuBar=new JMenuBar(); //Menu "File" Apri= new JMenuItem("Apri"); Apri.addActionListener(new AscoltatoreMenu()); Nuovo=new JMenuItem("Nuovo"); Nuovo.addActionListener(new AscoltatoreMenu()); Salva=new JMenuItem("Salva"); Salva.addActionListener(new AscoltatoreMenu()); Esci=new JMenuItem("Esci"); Esci.addActionListener(new AscoltatoreMenu()); MenuFile=new JMenu("File"); //Menu "Edit" Annulla=new JMenuItem("Annulla"); Annulla.addActionListener(new AscoltatoreMenu()); Ripristina=new JMenuItem("Ripristina"); Ripristina.addActionListener(new AscoltatoreMenu()); MenuEdit=new JMenu("Edit"); //Menu "Disegno" DisLinea = new JMenuItem("Linea"); DisLinea.addActionListener(new AscoltatoreMenu()); DisRettangolo = new JMenuItem("Rettangolo"); DisRettangolo.addActionListener(new AscoltatoreMenu()); DisCerchio = new JMenuItem("Cerchio"); DisCerchio.addActionListener(new AscoltatoreMenu()); MenuDisegno = new JMenu("Disegno"); //Menu "Info" Info=new JMenuItem("Info"); Info.addActionListener(new AscoltatoreMenu()); Help=new JMenuItem("Help"); Help.addActionListener(new AscoltatoreMenu()); MenuHelp=new JMenu("?"); //Pannello di disegno Disegno=new JPanel(); //---------------- //Setup Menu MenuFile.add(Apri); MenuFile.add(Nuovo); MenuFile.add(Salva); MenuFile.add(Esci); MenuBar.add(MenuFile); MenuEdit.add(Annulla); MenuEdit.add(Ripristina); MenuBar.add(MenuEdit); MenuHelp.add(Info); MenuHelp.add(Help); MenuBar.add(MenuDisegno); MenuDisegno.add(DisLinea); MenuDisegno.add(DisRettangolo); MenuDisegno.add(DisCerchio); //sposta il menu "Help" sulla destra MenuBar.add(Box.createHorizontalGlue()); MenuBar.add(MenuHelp); p.setJMenuBar(MenuBar); //Setup di tutto il resto p.pack(); p.setVisible(true); p.setSize(200,200); p.setLayout(new BorderLayout()); p.add(Disegno); Disegno.setSize(200,200); Disegno.setVisible(true); //-------------------- //Ascoltatore del Frame principale class AscoltatoreFinestra implements WindowListener{ public void windowClosing (WindowEvent we){ System.exit(0); } public void windowClosed (WindowEvent we){}; public void windowOpened (WindowEvent we){}; public void windowActivated (WindowEvent we){}; public void windowDeactivated (WindowEvent we){}; public void windowIconified (WindowEvent we){}; public void windowDeiconified (WindowEvent we){}; }; p.addWindowListener (new AscoltatoreFinestra()); } //Ascoltatore del Menu del Frame Principale class AscoltatoreMenu implements ActionListener{ public void actionPerformed (ActionEvent ae){ switch (ae.getActionCommand()){ case "Apri": /*da metterci qualcosa!*/ ; break; case "Nuovo": /*da metterci qualcosa!*/ ; break; case "Salva": /*da metterci qualcosa!*/ ; break; case "Esci": System.exit(0); break; case "Annulla": /*da metterci qualcosa!*/ ; break; case "Ripristina": /*da metterci qualcosa!*/ ; break; case "Linea": { Disegno_linea(); break; } case "Rettangolo": { Disegno_rettangolo(); break; } case "Cerchio": { Disegno_cerchio(); break; } case "Info": { JOptionPane.showMessageDialog (p,"Progetto di Davide Caprari","Programmazione da Oggetti",JOptionPane.INFORMATION_MESSAGE); }; break; case "Help": /*da metterci qualcosa!*/ ; break; } } } public static void Disegno_linea(){ //InserimentoCoordinate per la linea for (int i=0;i<2;i++){ esci=false; esci_ann=false; do{ try{ x = Integer.parseInt((JOptionPane.showInputDialog ("Dammi la coordinata x del punto "+(i+1)+" (tra "+lxsx+" e "+lxdx+")"))); esci=false; } catch (NumberFormatException e){ if (e.getMessage()=="null"){esci_ann=true;break;} else{ JOptionPane.showMessageDialog (null,"Devi inserire un numero compreso tra "+lxsx+" e "+lxdx,"Errore",JOptionPane.WARNING_MESSAGE); }; } finally{ if (x>=lxsx & x<=lxdx){esci=true;} else { esci=false; JOptionPane.showMessageDialog (null,"Devi inserire un numero compreso tra "+lxsx+" e "+lxdx,"Errore",JOptionPane.WARNING_MESSAGE); } } } while(esci==false); coo_linea_x[i]=x; if (esci_ann==false){ do{ try{ y = Integer.parseInt((JOptionPane.showInputDialog ("Dammi la coordinata y del punto "+(i+1)+" (tra "+lysx+" e "+lydx+")"))); esci=false; } catch (NumberFormatException e){ if (e.getMessage()=="null"){esci_ann=true;break;} else{ JOptionPane.showMessageDialog (null,"Devi inserire un numero compreso tra "+lysx+" e "+lydx,"Errore",JOptionPane.WARNING_MESSAGE); } } finally{ if (y>=lysx & y<=lydx){esci=true;} else { esci=false; JOptionPane.showMessageDialog (null,"Devi inserire un numero compreso tra "+lysx+" e "+lydx,"Errore",JOptionPane.WARNING_MESSAGE); } } } while(esci==false); coo_linea_y[i]=y;} else{break;} if(esci_ann){break;} } //proiezione punti sul JPanel(Disegno) class DisegnoLinea extends JPanel{ public void paintComponent(Graphics g){ g.drawLine(coo_linea_x[0],coo_linea_y[0],coo_linea_x[1],coo_linea_y[1]); } } DisegnoLinea linea=new DisegnoLinea(); p.add(linea); Disegno.repaint(); } public static void Disegno_rettangolo(){ //Inserimento coordinate per rettangolo for (int i=0;i<2;i++){ esci=false; esci_ann=false; do{ try{ x = Integer.parseInt((JOptionPane.showInputDialog ("Dammi la coordinata x dello spigolo "+(i+1)+" (tra "+lxsx+" e "+lxdx+")"))); esci=false; } catch (NumberFormatException e){ if (e.getMessage()=="null"){esci_ann=true;break;} else{ JOptionPane.showMessageDialog (null,"Devi inserire un numero compreso tra "+lxsx+" e "+lxdx,"Errore",JOptionPane.WARNING_MESSAGE); } } catch (Exception e){ System.out.println("Oh yes"); } finally{ if (x>=lxsx & x<=lxdx){esci=true;} else { esci=false; JOptionPane.showMessageDialog (null,"Devi inserire un numero compreso tra "+lxsx+" e "+lxdx,"Errore",JOptionPane.WARNING_MESSAGE); } } } while(esci==false); coo_rett_x[i]=x; if (esci_ann==false){ do{ try{ y = Integer.parseInt((JOptionPane.showInputDialog ("Dammi la coordinata y dello spigolo "+(i+1)+" (tra "+lysx+" e "+lydx+")"))); esci=false; } catch (NumberFormatException e){ if (e.getMessage()=="null"){esci_ann=true;break;} else{ JOptionPane.showMessageDialog (null,"Devi inserire un numero compreso tra "+lysx+" e "+lydx,"Errore",JOptionPane.WARNING_MESSAGE); } } finally{ if (y>=lysx & y<=lydx){esci=true;} else { esci=false; JOptionPane.showMessageDialog (null,"Devi inserire un numero compreso tra "+lysx+" e "+lydx,"Errore",JOptionPane.WARNING_MESSAGE); } } } while(esci==false); coo_rett_y[i]=y;} else{break;} if(esci_ann){break;} } //proiezione punti sul JPanel(Disegno) class DisegnoRettangolo extends JPanel{ public void paintComponent(Graphics g){ g.drawRect(coo_rett_x[0],coo_rett_y[0],coo_rett_x[1],coo_rett_y[1]); } } DisegnoRettangolo rettangolo=new DisegnoRettangolo(); Disegno.add(rettangolo); }

Rispondi quotando