Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Polestar 3 Performance, test drive: comodità e potenza possono convivere
Polestar 3 Performance, test drive: comodità e potenza possono convivere
Abbiamo passato diversi giorni alla guida di Polestar 3, usata in tutti i contesti. Come auto di tutti i giorni è comodissima, ma se si libera tutta la potenza è stupefacente
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026
In occasione del proprio Architecture Deep Dive 2025 Qualcomm ha mostrato in dettaglio l'architettura della propria prossima generazione di SoC destinati ai notebook Windows for ARM di prossima generazione. Snapdragon X2 Elite si candida, con sistemi in commercio nella prima metà del 2026, a portare nuove soluzioni nel mondo dei notebook sottili con grande autonomia
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
DJI Mini 5 Pro porta nella serie Mini il primo sensore CMOS da 1 pollice, unendo qualità d'immagine professionale alla portabilità estrema tipica di tutti i prodotti della famiglia. È un drone C0, quindi in un peso estremamente contenuto e che non richiede patentino, propone un gimbal rotabile a 225 gradi, rilevamento ostacoli anche notturno e autonomia fino a 36 minuti. Caratteristiche che rendono il nuovo drone un riferimento per creator e appassionati
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 15-04-2007, 14:44   #1
mariade
Senior Member
 
L'Avatar di mariade
 
Iscritto dal: Jun 2005
Città: Swords, Dublino
Messaggi: 642
java: aiuto per un compito

ciao ragazzi,

volevo che deste attenzione al codice che ho scritto per dirmi dove sbaglio perche' non riesco a capirlo.

Vi preciso prima di tutto l'errore:


C:\java\java3>javac Polygon.java
Polygon.java:35: cannot find symbol
symbol : method drawPolygon(int,int,int)
location: class java.awt.Graphics
g.drawPolygon(getUpperLeftX(),getUpperLeftY(), getPointCt());
^
1 error


Di seguito I codici che mi servono correggere:

Codice:
import java.awt.*; 
import javax.swing.*;
import java.io.Serializable;

public abstract class MyShape implements Serializable {
private int x1, x2, y1, y2;
private int pointCt = 0;
private int XYValues[] = new int[500];

private Color color=Color.WHITE;

public MyShape () {setX1(0); setY1(0); setX2(0); setY2(0);}
public MyShape (int val1, int val2, int val3, int val4) { setX1(val1); setY1(val2); setX2(val3); setY2(val4);}

public MyShape (int val1, int val2, int val3, int val4, int pointCt) { setX1(val1); setY1(val2); setX2(val3);setY2(val4); setPointCt(pointCt);}

public MyShape (int val1, int val2, int val3, int val4, Color col) { setX1(val1); setY1(val2); setX2(val3);setY2(val4); setColor(col);}


public MyShape (int vals[]) {setX1(vals[0]); setY1(vals[1]); setX2(vals[2]); setY2(vals[3]); }

public MyShape (int vals[], int pointCt) {setX1(vals[0]); setY1(vals[1]); setX2(vals[2]); setY2(vals[3]); setPointCt(pointCt); }

public MyShape (int vals[], Color col) {setX1(vals[0]); setY1(vals[1]); setX2(vals[2]); setY2(vals[3]);setColor(col); }

public void setX1(int val) {x1 = ( val >= 0 ? val : 0 );} 
public void setX2(int val) {x2 = ( val >= 0 ? val : 0 );}
public void setY1(int val) {y1 = ( val >= 0 ? val : 0 );} 
public void setY2(int val) {y2 = ( val >= 0 ? val : 0 );}
public void setPointCt(int pointCt) {pointCt = ( pointCt >= 0 ? pointCt : 0 );} 


public void setColor(Color col) {this.color = col;}
public Color getColor() {return color;}
public int getX1() {return x1;} 
public int getX2() {return x2;}
public int getY1() {return y1;} 
public int getY2() {return y2;}
public int getPointCt() {return pointCt;}
public abstract void draw (Graphics g);

}
Codice:
import java.awt.*;
import javax.swing.*;
import java.awt.Color;
import java.awt.Graphics;
import static java.lang.Math.*;


public class Polygon extends MyShape {

private int pointCt = 0;

public Polygon () {super();}

public Polygon (int x1, int y1, int x2, int y2) {super(x1,y1,x2,y2); }

public Polygon (int val1, int val2, int val3, int val4, int pointCt) {super(val1,val2,val3,val4,pointCt); }

public Polygon (int val1, int val2, int val3, int val4, Color col) {super(val1,val2,val3,val4,col); }
public Polygon (int val[]) {super(val);}

public Polygon (int val[],int pointCt) {super(val,pointCt);}


public Polygon (int val[],Color col) {super(val,col);}


public int getUpperLeftX() { return Math.min(getX1(), getX2()); }
public int getUpperLeftY() { return Math.min(getY1(), getY2()); }

public void draw (Graphics g) { 


    g.setColor(getColor());

     g.drawPolygon(getUpperLeftX(),getUpperLeftY(), getPointCt());
 } 

 }
Codice:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.EOFException;
import java.io.ObjectOutputStream;
import java.io.ObjectInputStream;
import java.util.NoSuchElementException;

public class ShapeDrawJFrame extends JFrame {	

private final int SHAPETYPES=6;	        
private int shapeType=0;	       
private String shapeTypes[]= {"Line","Oval", "Rectangle", "FilledOval", "FilledRectangle", "Polygon"};	
private int numShapes=0;	        
private int XYValues[] = new int[500];
private int pointCt = 0;   	
private MyShape[] shapes = new MyShape[100];     	              	
private JComboBox shapesComboBox;	
private JComboBox colorChoice;	        
private Container container;	       
private JPanel lowerRow;
private JPanel upperRow;
private JButton undoButton;  
private JLabel label;     
private Graphics dragGraphics;               
private Color dragColor;
private int startAngle;
private int arcAngle;
private ObjectOutputStream output;
private ObjectInputStream input;              

private final static int                            
BLACK = 0,                      
RED = 1,            // Some constants to make                           
GREEN = 2,          // the code more readable.                            
BLUE = 3,           // These numbers code for                          
CYAN = 4,           // the different drawing colors.                       
MAGENTA = 5,                        
YELLOW = 6,                            
ORANGE = 7,
PINK = 8,
GRAY = 9;
		
 private boolean beingDragged;
  private JButton save, load;  
  private JTextField fileName;

public ShapeDrawJFrame() {

super("Draw Shapes");		

// addMouseListener(handler);
//     addMouseMotionListener(handler);		
container = getContentPane();		
container.setBackground(new Color(255,255,255));
                           

lowerRow = new JPanel();
label = new JLabel("You have select the type of shape to draw:");
lowerRow.add(label);
		
shapesComboBox = new JComboBox(shapeTypes);		
shapesComboBox.setSelectedIndex(0);		
lowerRow.add(shapesComboBox); 
              
colorChoice = new JComboBox();				
colorChoice.addItem("Black");               
colorChoice.addItem("Red");               
colorChoice.addItem("Green");               
colorChoice.addItem("Blue");               
colorChoice.addItem("Cyan");               
colorChoice.addItem("Magenta");                
colorChoice.addItem("Yellow");                
colorChoice.addItem("Orange");
colorChoice.addItem("Pink"); 
colorChoice.addItem("Gray");              
colorChoice.setBackground(Color.white);                
lowerRow.add(colorChoice);            	



undoButton = new JButton("UNDO");
lowerRow.add(undoButton); 
			

container.add(lowerRow, BorderLayout.SOUTH); 

MouseHandler handler= new MouseHandler();
     addMouseListener(handler);
     addMouseMotionListener(handler);     


     upperRow = new JPanel();
     save = new JButton( "  Save " );
     upperRow.add(save);
     save.addActionListener(

         new ActionListener() 
         {
            public void actionPerformed( ActionEvent event )
            {
              openOutputFile();
              writeShapes();
              closeFile();


            } 
       } 
      ); 


     load = new JButton( "  Load " );
      upperRow.add(load);
     load.addActionListener(

         new ActionListener() 
         {
            public void actionPerformed( ActionEvent event )
            {
              openInputFile();
              readShapes();
              closeFile();
              repaint();

            } 
       } 
      );  

      fileName=new JTextField(15);
      upperRow.add(fileName); 

container.add(upperRow, BorderLayout.NORTH);
		
setSize(600,600); 	
setVisible( true );	

}

public void paint( Graphics g) {		
super.paint(g);		
for (int sp=0;sp< shapes.length ; sp++) {			
if(shapes[sp]!=null) {                               

//g.setColor(dragColor);			

shapes[sp].draw(g);	  }
  } 
 }		

public void createShape(int index) {		

numShapes++;		

switch (index) {			
case 0: shapes[numShapes] = new Line(XYValues,getCurrentColor()); break;			
case 1: shapes[numShapes] = new Oval(XYValues,getCurrentColor()); break;			
case 2: shapes[numShapes] = new Rectangle(XYValues,getCurrentColor()); break; 
case 3: shapes[numShapes] = new FilledOval(XYValues,getCurrentColor()); break;
case 4: shapes[numShapes] = new FilledRectangle(XYValues,getCurrentColor()); break;

        }	
}        

private Color getCurrentColor() {              
// Check the colorChoice menu to find the currently               
// selected color, and return the appropriate color              
// object.        

int currentColor = colorChoice.getSelectedIndex();         
Color colorPlot=new Color(0,0,0);

 switch (currentColor) {           

case 0:  
colorPlot=Color.BLACK;  
break;                 

case 1:                 
colorPlot=Color.RED;  
break;                      

case 2:              
colorPlot=Color.GREEN;  
break; 

case 3:                
colorPlot=Color.BLUE;  
break; 

case 4:             
colorPlot=Color.CYAN;   
break;  

case 5:               
colorPlot=Color.MAGENTA;   
break;  

case 6:               
colorPlot=Color.YELLOW;   
break; 

case 7:               
colorPlot=Color.ORANGE;   
break;

case 8:               
colorPlot=Color.PINK;   
break;

case 9:               
colorPlot=Color.GRAY;   
break;

default:               
colorPlot=Color.BLACK;      
break; }  

return colorPlot;

}




private class MouseHandler implements MouseMotionListener, MouseListener{	

public void mousePressed (MouseEvent event) {           			

XYValues[0] = event.getX();			
XYValues[1] = event.getY();                                                      

//dragGraphics = container.getGraphics();                               
//dragColor = getCurrentColor();                               
//dragGraphics.setColor(dragColor);    

  }		


public void mouseDragged(MouseEvent event)
     {
       XYValues[2]=event.getX();
       XYValues[3]=event.getY();    


       createShape(shapesComboBox.getSelectedIndex());
       numShapes--;

       repaint();

     }

public void mouseReleased (MouseEvent event) {			

XYValues[2] = event.getX();			
XYValues[3] = event.getY();                       
createShape(shapesComboBox.getSelectedIndex());                      

repaint( );        
     }


public void mouseEntered(MouseEvent event){}


     public void mouseClicked(MouseEvent event){}


     public void mouseExited(MouseEvent event){}     


     public void mouseMoved(MouseEvent event){}


  }
  

  public void openOutputFile()
  {
   
    
    try
    {
      output = new ObjectOutputStream(new FileOutputStream(fileName.getText()));
      
    }
    catch (IOException ioException )
    {
	System.err.println("error output opening file");

    }

  }


  public void openInputFile()
  {
   
    
    try
    {
      input = new ObjectInputStream(new FileInputStream(fileName.getText()));
      
    }
    catch (IOException ioException )
    {
	System.err.println("error input opening file");

    }

  }


  public void closeFile()
  {
    try
    {

      if(input != null)
         input.close();
      if(output != null)
         output.close();
    
    }
    catch (IOException ioException )
    {
	System.err.println("error closing file");
        System.exit(1);

    }

  }




  public void writeShapes()
  {
     for(int sp=0; sp<shapes.length;sp++)
     {
       try
       {
        if(shapes[sp]!=null)
        {
          output.writeObject(shapes[sp]);
        }
                    
       }
       catch (IOException ioException)
       {
         System.err.println("error writing to file");
         return;
       }   
       catch (NoSuchElementException elementException)
       {
         System.err.println("Invalid Input. Please try again");

       } 


     }

    }     


  public void readShapes()
  {

     for(int i=0;i<numShapes;i++) shapes[i]= null;
     numShapes =0;

     try
     {
        while(true)
        {
           shapes[numShapes] =  (MyShape) input.readObject();
           numShapes++;
        }
      }
      catch (EOFException endOfFileException)
      {
        return;

      } 
      catch (ClassNotFoundException classNotFoundException)
      {
        System.err.println("unable to create object");

      } 
      catch (IOException ioException)
      {
        System.err.println("error during read from file");
      } 

  }

 }
qui il codice main:
Codice:
import javax.swing.JFrame;

public class ShapeDraw

{

//execute application
public static void main(String args[]) {

ShapeDrawJFrame shapeDrawJFrame = new ShapeDrawJFrame();
shapeDrawJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

shapeDrawJFrame.setVisible( true );
}}
Volevo aggiungere che java ho cominciato adesso a studiarlo!
Vi prego qualche dritta!Grazie a tutti!

Ultima modifica di mariade : 15-04-2007 alle 15:09.
mariade è offline   Rispondi citando il messaggio o parte di esso
Old 15-04-2007, 15:41   #2
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Ciao, il metodo drawPolygon(int[] xPoints, int[] yPoints, int nPoints) ammette come vedi tre argomenti, il primo è un array dei punti per le x, il secondo un array per le y e il terzo semplice int che indica quanti punti vuoi.
Te usi 3 int invece.
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 15-04-2007, 15:55   #3
mariade
Senior Member
 
L'Avatar di mariade
 
Iscritto dal: Jun 2005
Città: Swords, Dublino
Messaggi: 642
Quote:
Originariamente inviato da MEMon Guarda i messaggi
Ciao, il metodo drawPolygon(int[] xPoints, int[] yPoints, int nPoints) ammette come vedi tre argomenti, il primo è un array dei punti per le x, il secondo un array per le y e il terzo semplice int che indica quanti punti vuoi.
Te usi 3 int invece.
Grazie per la risposta.

Questo lo sapevo, il punto e' questo: ho bisogno di disegnare i poligoni con array non precisi. L'applicazione e' di disegno appunto e nel compito si chiede di creare la classe poligono come sotto classe di MyShape che e' la superclasse. Immaginavo di aver sbagliato a scrivere il codice poligono, ma non ho idea di come inserire un array che non abbia dei punti ben specificati.
mariade è offline   Rispondi citando il messaggio o parte di esso
Old 15-04-2007, 15:59   #4
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Ma cosa intendi con array non precisi?
Un poligono è una figura definita...se non sai da che punti è definita come fai a disegnarlo?

Magari prova a spiegarti meglio, perchè se ho capito bene non hai le idee molte chiare, ma forse ho capito male.
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 15-04-2007, 16:11   #5
mariade
Senior Member
 
L'Avatar di mariade
 
Iscritto dal: Jun 2005
Città: Swords, Dublino
Messaggi: 642
Quote:
Originariamente inviato da MEMon Guarda i messaggi
Ma cosa intendi con array non precisi?
Un poligono è una figura definita...se non sai da che punti è definita come fai a disegnarlo?

Magari prova a spiegarti meglio, perchè se ho capito bene non hai le idee molte chiare, ma forse ho capito male.
Cioe' io devo aver la possibilita' di disegnare un poligono a piacer mio, cioe' se io premo col mouse un un punto dell'applicazione quello sara' il primo vertice del poligono, il secondo mi fara' una linea, col terzo disegnero' un altro lato fino a che posso disegnare la forma che io avevo in mente.
Spero di esser stata piu' chiara.

Ti posto il codice (gira ma non e' completo) cosi' se hai la possibilita' di farlo girare avrai le idee piu' chiare:

Codice:
import java.awt.*;
import javax.swing.*;
import java.awt.Color;
import java.awt.Graphics;
import static java.lang.Math.*;


public class Polygon extends MyShape {

private int pointCt = 0;

public Polygon () {super();}

public Polygon (int x1, int y1, int x2, int y2) {super(x1,y1,x2,y2); }

public Polygon (int val1, int val2, int val3, int val4, int pointCt) {super(val1,val2,val3,val4,pointCt); }

public Polygon (int val1, int val2, int val3, int val4, Color col) {super(val1,val2,val3,val4,col); }
public Polygon (int val[]) {super(val);}

public Polygon (int val[],int pointCt) {super(val,pointCt);}


public Polygon (int val[],Color col) {super(val,col);}



public void draw (Graphics g) { 

   int xValues[] = {100};
   int yValues[] = {200};


    g.setColor(getColor());

     g.drawPolygon(xValues, yValues,pointCt);
 } 

 
}
Codice:
import java.awt.Graphics;

public class Line extends MyShape {

public Line () {super();}

public Line (int x1, int y1, int x2, int y2) {super(x1,y1,x2,y2); }

public Line (int val1, int val2, int val3, int val4, Color col) {super(val1,val2,val3,val4,col); }
public Line (int val[]) {super(val);}

public Line (int val[],Color col) {super(val,col);}
public void draw (Graphics g) {  

g.setColor(getColor());  
g.drawLine(getX1(),getY1(),getX2(), getY2());  } 

}
Codice:
import java.awt.*; 
import javax.swing.*;
import java.awt.Color;
import java.awt.Graphics;

public class FilledRectangle extends BoundedShape {

public FilledRectangle () {super();}
public FilledRectangle (int val1, int val2, int val3, int val4) {super(val1,val2,val3,val4);}
public FilledRectangle (int val1, int val2, int val3, int val4, Color col) {super(val1,val2,val3,val4, col);}
public FilledRectangle (int val[]) {super(val);}
public FilledRectangle (int val[], Color col) {super(val, col);}

public void draw (Graphics g) {

g.setColor(getColor()); 

g.fillRect(getUpperLeftX(),getUpperLeftY(),getWidth(),getHeight());  }  }
Codice:
import java.awt.Color;
import java.awt.Graphics;

public class FilledOval extends BoundedShape {

public FilledOval () {super();}
public FilledOval (int val1, int val2, int val3, int val4) {super(val1,val2,val3,val4);}

public FilledOval (int val1, int val2, int val3, int val4, Color col) {super(val1,val2,val3,val4,col);}
public FilledOval (int val[]) {super(val);}
public FilledOval (int val[], Color col) {super(val,col);}
public void draw (Graphics g) {

g.setColor(getColor()); 

g.fillOval(getUpperLeftX(),getUpperLeftY(),getWidth(),getHeight());}

  }
Codice:
import java.awt.*; 
import javax.swing.*;
import java.awt.Color;
import java.awt.Graphics;

public class Oval extends BoundedShape {

public Oval () {super();}
public Oval (int val1, int val2, int val3, int val4) {super(val1,val2,val3,val4);}

public Oval (int val1, int val2, int val3, int val4, Color col) {super(val1,val2,val3,val4,col);}
public Oval (int val[]) {super(val);}
public Oval (int val[], Color col) {super(val,col);}
public void draw (Graphics g) {

g.setColor(getColor()); 

g.drawOval(getUpperLeftX(),getUpperLeftY(),getWidth(),getHeight());}

}
Codice:
import java.awt.*; 
import javax.swing.*;
import java.awt.Color;
import java.awt.Graphics;

public class Rectangle extends BoundedShape {


public Rectangle () {super();}
public Rectangle (int val1, int val2, int val3, int val4) {super(val1,val2,val3,val4);}
public Rectangle (int val1, int val2, int val3, int val4, Color col) {super(val1,val2,val3,val4, col);}
public Rectangle (int val[]) {super(val);}
public Rectangle (int val[], Color col) {super(val, col);}
public void draw (Graphics g) {

g.setColor(getColor()); 
g.drawRect(getUpperLeftX(),getUpperLeftY(),getWidth(),getHeight());}


}
Codice:
import java.awt.*; 
import javax.swing.*;
import java.awt.Color;
import java.awt.Graphics;

public class FilledRectangle extends BoundedShape {

public FilledRectangle () {super();}
public FilledRectangle (int val1, int val2, int val3, int val4) {super(val1,val2,val3,val4);}
public FilledRectangle (int val1, int val2, int val3, int val4, Color col) {super(val1,val2,val3,val4, col);}
public FilledRectangle (int val[]) {super(val);}
public FilledRectangle (int val[], Color col) {super(val, col);}

public void draw (Graphics g) {

g.setColor(getColor()); 

g.fillRect(getUpperLeftX(),getUpperLeftY(),getWidth(),getHeight());  }  }
Codice:
import java.awt.*; 
import javax.swing.*;
import java.awt.Color;

import static java.lang.Math.*;

public abstract class BoundedShape extends MyShape {

public BoundedShape () {super();}

public BoundedShape (int val1, int val2, int val3, int val4) {super(val1,val2,val3,val4);}

public BoundedShape (int val1, int val2, int val3, int val4, Color col) {super(val1,val2,val3,val4, col);}
public BoundedShape (int val[]) {super(val); }
public BoundedShape (int val[], Color col) {super(val, col); }

public int getUpperLeftX() { return Math.min(getX1(), getX2()); }
public int getUpperLeftY() { return Math.min(getY1(), getY2()); }
public int getWidth() {int w=Math.abs(getX1() - getX2());
return w;}
public int getHeight() {int h=Math.abs(getY1() - getY2());
return h;}

}
Codice:
import java.awt.*; 
import javax.swing.*;
import java.io.Serializable;

public abstract class MyShape implements Serializable {
private int x1, x2, y1, y2;
private int pointCt = 0;
private int XYValues[] = new int[500];

private Color color=Color.WHITE;

public MyShape () {setX1(0); setY1(0); setX2(0); setY2(0);}
public MyShape (int val1, int val2, int val3, int val4) { setX1(val1); setY1(val2); setX2(val3); setY2(val4);}

public MyShape (int val1, int val2, int val3, int val4, int pointCt) { setX1(val1); setY1(val2); setX2(val3);setY2(val4); setPointCt(pointCt);}

public MyShape (int val1, int val2, int val3, int val4, Color col) { setX1(val1); setY1(val2); setX2(val3);setY2(val4); setColor(col);}


public MyShape (int vals[]) {setX1(vals[0]); setY1(vals[1]); setX2(vals[2]); setY2(vals[3]); }

public MyShape (int vals[], int pointCt) {setX1(vals[0]); setY1(vals[1]); setX2(vals[2]); setY2(vals[3]); setPointCt(pointCt); }

public MyShape (int vals[], Color col) {setX1(vals[0]); setY1(vals[1]); setX2(vals[2]); setY2(vals[3]);setColor(col); }

public void setX1(int val) {x1 = ( val >= 0 ? val : 0 );} 
public void setX2(int val) {x2 = ( val >= 0 ? val : 0 );}
public void setY1(int val) {y1 = ( val >= 0 ? val : 0 );} 
public void setY2(int val) {y2 = ( val >= 0 ? val : 0 );}
public void setPointCt(int pointCt) {pointCt = ( pointCt >= 0 ? pointCt : 0 );} 


public void setColor(Color col) {this.color = col;}
public Color getColor() {return color;}
public int getX1() {return x1;} 
public int getX2() {return x2;}
public int getY1() {return y1;} 
public int getY2() {return y2;}
public int getPointCt() {return pointCt;}
public abstract void draw (Graphics g);

}
Codice:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.EOFException;
import java.io.ObjectOutputStream;
import java.io.ObjectInputStream;
import java.util.NoSuchElementException;

public class ShapeDrawJFrame extends JFrame {	

private final int SHAPETYPES=6;	        
private int shapeType=0;	       
private String shapeTypes[]= {"Line","Oval", "Rectangle", "FilledOval", "FilledRectangle", "Polygon"};	
private int numShapes=0;	        
private int XYValues[] = new int[4];
private int xValues[] = {};
private int yValues[] = {};
private int pointCt = 0;   	
private MyShape[] shapes = new MyShape[100];     	              	
private JComboBox shapesComboBox;	
private JComboBox colorChoice;	        
private Container container;	       
private JPanel lowerRow;
private JPanel upperRow;
private JButton undoButton;  
private JLabel label;     
private Graphics dragGraphics;               
private Color dragColor;
private int startAngle;
private int arcAngle;
private ObjectOutputStream output;
private ObjectInputStream input;              

private final static int                            
BLACK = 0,                      
RED = 1,            // Some constants to make                           
GREEN = 2,          // the code more readable.                            
BLUE = 3,           // These numbers code for                          
CYAN = 4,           // the different drawing colors.                       
MAGENTA = 5,                        
YELLOW = 6,                            
ORANGE = 7,
PINK = 8,
GRAY = 9;
		
 private boolean beingDragged;
  private JButton save, load;  
  private JTextField fileName;

public ShapeDrawJFrame() {

super("Draw Shapes");		

// addMouseListener(handler);
//     addMouseMotionListener(handler);		
container = getContentPane();		
container.setBackground(new Color(255,255,255));
                           

lowerRow = new JPanel();
label = new JLabel("You have select the type of shape to draw:");
lowerRow.add(label);
		
shapesComboBox = new JComboBox(shapeTypes);		
shapesComboBox.setSelectedIndex(0);		
lowerRow.add(shapesComboBox); 
              
colorChoice = new JComboBox();				
colorChoice.addItem("Black");               
colorChoice.addItem("Red");               
colorChoice.addItem("Green");               
colorChoice.addItem("Blue");               
colorChoice.addItem("Cyan");               
colorChoice.addItem("Magenta");                
colorChoice.addItem("Yellow");                
colorChoice.addItem("Orange");
colorChoice.addItem("Pink"); 
colorChoice.addItem("Gray");              
colorChoice.setBackground(Color.white);                
lowerRow.add(colorChoice);            	



undoButton = new JButton("UNDO");
lowerRow.add(undoButton); 
			

container.add(lowerRow, BorderLayout.SOUTH); 

MouseHandler handler= new MouseHandler();
     addMouseListener(handler);
     addMouseMotionListener(handler);     


     upperRow = new JPanel();
     save = new JButton( "  Save " );
     upperRow.add(save);
     save.addActionListener(

         new ActionListener() 
         {
            public void actionPerformed( ActionEvent event )
            {
              openOutputFile();
              writeShapes();
              closeFile();


            } 
       } 
      ); 


     load = new JButton( "  Load " );
      upperRow.add(load);
     load.addActionListener(

         new ActionListener() 
         {
            public void actionPerformed( ActionEvent event )
            {
              openInputFile();
              readShapes();
              closeFile();
              repaint();

            } 
       } 
      );  

      fileName=new JTextField(15);
      upperRow.add(fileName); 

container.add(upperRow, BorderLayout.NORTH);
		
setSize(600,600); 	
setVisible( true );	

}

public void paint( Graphics g) {		
super.paint(g);		
for (int sp=0;sp< shapes.length ; sp++) {			
if(shapes[sp]!=null) {                               

//g.setColor(dragColor);			

shapes[sp].draw(g);	  }
  } 
 }		

public void createShape(int index) {		

numShapes++;		

switch (index) {			
case 0: shapes[numShapes] = new Line(XYValues,getCurrentColor()); break;			
case 1: shapes[numShapes] = new Oval(XYValues,getCurrentColor()); break;			
case 2: shapes[numShapes] = new Rectangle(XYValues,getCurrentColor()); break; 
case 3: shapes[numShapes] = new FilledOval(XYValues,getCurrentColor()); break;
case 4: shapes[numShapes] = new FilledRectangle(XYValues,getCurrentColor()); break;
case 5: shapes[numShapes] = new Polygon(XYValues,getCurrentColor()); break;
        }	
}        

private Color getCurrentColor() {              
// Check the colorChoice menu to find the currently               
// selected color, and return the appropriate color              
// object.        

int currentColor = colorChoice.getSelectedIndex();         
Color colorPlot=new Color(0,0,0);

 switch (currentColor) {           

case 0:  
colorPlot=Color.BLACK;  
break;                 

case 1:                 
colorPlot=Color.RED;  
break;                      

case 2:              
colorPlot=Color.GREEN;  
break; 

case 3:                
colorPlot=Color.BLUE;  
break; 

case 4:             
colorPlot=Color.CYAN;   
break;  

case 5:               
colorPlot=Color.MAGENTA;   
break;  

case 6:               
colorPlot=Color.YELLOW;   
break; 

case 7:               
colorPlot=Color.ORANGE;   
break;

case 8:               
colorPlot=Color.PINK;   
break;

case 9:               
colorPlot=Color.GRAY;   
break;

default:               
colorPlot=Color.BLACK;      
break; }  

return colorPlot;

}




private class MouseHandler implements MouseMotionListener, MouseListener{	

public void mousePressed (MouseEvent event) {           			

XYValues[0] = event.getX();			
XYValues[1] = event.getY();
                                                     

//dragGraphics = container.getGraphics();                               
//dragColor = getCurrentColor();                               
//dragGraphics.setColor(dragColor);    

  }		


public void mouseDragged(MouseEvent event)
     {
       XYValues[2]=event.getX();
       XYValues[3]=event.getY(); 
         


       createShape(shapesComboBox.getSelectedIndex());
       numShapes--;

       repaint();

     }

public void mouseReleased (MouseEvent event) {			

XYValues[2] = event.getX();			
XYValues[3] = event.getY(); 
                    
createShape(shapesComboBox.getSelectedIndex());                      

repaint( );        
     }


public void mouseEntered(MouseEvent event){}


     public void mouseClicked(MouseEvent event){}


     public void mouseExited(MouseEvent event){}     


     public void mouseMoved(MouseEvent event){}


  }
  

  public void openOutputFile()
  {
   
    
    try
    {
      output = new ObjectOutputStream(new FileOutputStream(fileName.getText()));
      
    }
    catch (IOException ioException )
    {
	System.err.println("error output opening file");

    }

  }


  public void openInputFile()
  {
   
    
    try
    {
      input = new ObjectInputStream(new FileInputStream(fileName.getText()));
      
    }
    catch (IOException ioException )
    {
	System.err.println("error input opening file");

    }

  }


  public void closeFile()
  {
    try
    {

      if(input != null)
         input.close();
      if(output != null)
         output.close();
    
    }
    catch (IOException ioException )
    {
	System.err.println("error closing file");
        System.exit(1);

    }

  }




  public void writeShapes()
  {
     for(int sp=0; sp<shapes.length;sp++)
     {
       try
       {
        if(shapes[sp]!=null)
        {
          output.writeObject(shapes[sp]);
        }
                    
       }
       catch (IOException ioException)
       {
         System.err.println("error writing to file");
         return;
       }   
       catch (NoSuchElementException elementException)
       {
         System.err.println("Invalid Input. Please try again");

       } 


     }

    }     


  public void readShapes()
  {

     for(int i=0;i<numShapes;i++) shapes[i]= null;
     numShapes =0;

     try
     {
        while(true)
        {
           shapes[numShapes] =  (MyShape) input.readObject();
           numShapes++;
        }
      }
      catch (EOFException endOfFileException)
      {
        return;

      } 
      catch (ClassNotFoundException classNotFoundException)
      {
        System.err.println("unable to create object");

      } 
      catch (IOException ioException)
      {
        System.err.println("error during read from file");
      } 

  }

 }
Codice:
import javax.swing.JFrame;

public class ShapeDraw

{

//execute application
public static void main(String args[]) {

ShapeDrawJFrame shapeDrawJFrame = new ShapeDrawJFrame();
shapeDrawJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

shapeDrawJFrame.setVisible( true );
}}
grazie ancora.
mariade è offline   Rispondi citando il messaggio o parte di esso
Old 15-04-2007, 16:21   #6
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Non mi metto a guardare il codice ora, comunque ora ho capito.
Per quello che vuoi fare credo che puoi fare a meno del metodo drawPolygon visto che ti basta disegnare una serie di linee.
Per fare l'effetto che intendi te dovresti usare il metodo drawLine(int x1, int y1, int x2, int y2) per ogni coppia di punti che individui.

Qualche idea su come fare:
Utilizzi due array, uno per le X e uno per le Y, dove di volta in volta salvi il punto individuato dal mouse, ogni due punti(una linee è una coppia di punti infatti) disegni una linea prendendo gli ultimi due valori di ogni array, infatti avrai ad esempio dopo che hai selezionato due punti
Array di X: 50 , 70
Array di Y: 20 , 30
Prendi fuori i due punti che sono A(50 , 20) e B(70 , 30) e li utilizzi nel metodo g.drawLine(int x1, int y1, int x2, int y2).

Volendo invece degli array puoi utilizzare 4 variabili temporanee, ma meglio con gli array se magari ci vuoi fare altro dopo con questi punti.
Oppure utilizzare un array di punti.

Ultima modifica di MEMon : 15-04-2007 alle 16:28.
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 15-04-2007, 16:25   #7
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Però così non diventa un vero e proprio poligono, ma una serie di linee, e decidi te quando "chiuderlo", se vuoi creare un vero e proprio poligono, fai sempre come prima ma quando decidi che il poligono è finito cancelli le linee che hai disegnato(basta che disegni un rettangolo del colore dello sfondo grande abbastanza da coprire le linee) e disegni il poligono vero e proprio utilizzando gli array che hai creato.
In questo modo è a tutti gli effetti un poligono vero e proprio.

ps.Se utilizzi solo linee puoi anche fare una cosa stile matita di paint.
pss.puoi dare il comando di chiusure col tasto destro del mouse.

Ultima modifica di MEMon : 15-04-2007 alle 16:31.
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 15-04-2007, 16:30   #8
mariade
Senior Member
 
L'Avatar di mariade
 
Iscritto dal: Jun 2005
Città: Swords, Dublino
Messaggi: 642
grazie per la risposta, spero di riuscirci.
se qualcuno ha altre idee....????
mariade è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Polestar 3 Performance, test drive: comodità e potenza possono convivere Polestar 3 Performance, test drive: comodit&agra...
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026 Qualcomm Snapdragon X2 Elite: l'architettura del...
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice Recensione DJI Mini 5 Pro: il drone C0 ultra-leg...
ASUS Expertbook PM3: il notebook robusto per le aziende ASUS Expertbook PM3: il notebook robusto per le ...
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo Test ride con Gowow Ori: elettrico e off-road va...
Redal Alert 2: Command & Conquer si ...
Kingston Technology: memorie e storage c...
Narwal Freo Z10 Ultra: il robot con moci...
In 3 minuti le vedete tutte: sono le mig...
Black Friday da record per Tineco: le sc...
La nuova PS5 con Fortnite manda in tilt ...
Amazon, i tagli hanno colpito soprattutt...
Pazzesco: Panasonic Lumix DC-GH5M2E a 79...
Ecco tutte le offerte Black Friday pi&ug...
DJI Neo a 169€, Flip Combo a 309€ e molt...
Quattro persone arrestate negli USA per ...
Kindle Paperwhite Signature Edition, Col...
Boom di vendite per Kindle e Fire TV Sti...
iPhone 17 Pro, il più desiderato,...
Nuovo record, 849€ per i MacBook Air con...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 13:56.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v