Forumzone Community

Sistemi Operativi e applicazioni => Microsoft Windows e applicazioni => Programmazione => Discussione aperta da: piketto il 25 Maggio 2007, 13:06:57

Titolo: applet java grafico
Inserito da: piketto il 25 Maggio 2007, 13:06:57
ciao ragazzi,

avrei bisogno di un piccolo aiuto per creare un programmino semplice: dovrei fare un applet con un grafico cartesiano, inserire e togliere con il mouse dei punti... tutto qua... ho poca esperienza di java, e sono riuscito a fare solamente un grafico fatto tutto di rette che si incrociano... per fare i quadratini. qualcuno mi può aiutare? GRAZIE!

ora vi metto il codice da me fatto:

import java.awt.*;

public class Griglia extends java.applet.Applet {
public void paint(Graphics g) {
int x,y;

/* disegna le linee verticali */
for(x=0; x<=200; x=x+10) {
g.drawLine(x, 0, x, 200);
}

/* disegna le linee orizzontali */
for(y=0; y<=200; y=y+10) {
g.drawLine(0, y, 200, y);
}
}
}

questo per quanto riguarda la griglia...

come posso fare per cliccare con il mouse per inserire dei punti?
Titolo: applet java grafico
Inserito da: benna il 25 Maggio 2007, 20:37:12
prima di tutto devi implementare nella classe l'interfaccia MouseListener e dichiarare l'interesse agli eventi del mouse con

public void init()
{
addMouseListener(mouse);
}

a questo punto devi "overridare" il metodo mouseClicked della classe MouseListener in questo modo

public void mouseClicked(MouseEvent e)
{
//leggo le coordinate del mouse
double x=e.getX();
double y=e.getY();
//chiamo il metodo per disegnare il punto
disegnaPunto(x,y);
repaint();
}

ora non ti resta che creare il metodo disegnaPunto che disegni un cerchio di raggio 1 e di coordinate x ed y

EDIT: nel metodo init devi scrivere addMouseListener(this);



Questo messaggio è stato aggiornato da benna il 26/05/2007  alle ore  13:12:30
Titolo: applet java grafico
Inserito da: piketto il 29 Maggio 2007, 11:02:56
ciao e grazie per la risposta, ho cosi svolta per ora:

import java.awt.*;

public class prova2 extends java.applet.Applet {
  public boolean mouseDown(Event e, int a, int b) {
    Graphics g=getGraphics();

    g.fillRect(a-2,b-2,4,4);
     
  return true;
  }

  public void paint(Graphics g) {
    int x,y;
  for(x=0; x<=200; x=x+10) {
      g.drawLine(x, 0, x, 200);
    }
for(y=0; y<=200; y=y+10) {
      g.drawLine(0, y, 200, y);
    }  
  }

ora... come posso fare, per togliere con il click del tasto destro mouse, il punto dalla griglia? grazieeeeeeeeeeeee
Titolo: applet java grafico
Inserito da: benna il 29 Maggio 2007, 19:59:12
nel metodo mouseClicked() devi inserire questo controllo:

if(e.getModifiers()==InputEvent.BUTTON1_MASK)//tasto sinistro
{
...
}
else if(e.getModifiers()==InputEvent.BUTTON3_MASK)//tasto destro
{
...
}

quando viene premuto il tasto destro disegni un punto col colore dello sfondo invece che nero



Questo messaggio è stato aggiornato da benna il 29/05/2007  alle ore  19:59:33
Titolo: applet java grafico
Inserito da: piketto il 31 Maggio 2007, 11:57:31
Ciao e inanzittuo grazie per l'aiuto...

secondo te qua dove sbaglio? perchè voglio limitare i punti a 10 e inserirli solo con il click del mouse destro:

public PuntiClick() {
       
  punti = new Ellipse2D.Double[10];
  numPunti = 0;
  messaggio = "clicca per aggiungere un punto";

class AscoltaClick extends MouseAdapter
      {
      public void BUTTON1(MouseEvent e)
      {
      if(numPunti>=punti.length)
      messaggio = "basta cosi'";
      else
      {
      x = e.getX();
      y = e.getY();
      punti[numPunti] = new Ellipse2D.Double(x-2, y-2, 4, 4);
      numPunti++;
      }
Grazie... di java non sono molto pratico... ma devo fa st'esercizio!
Titolo: applet java grafico
Inserito da: benna il 31 Maggio 2007, 20:25:38
Ciao,
l'errore è nel metodo BUTTON1():
devi per prima cosa implementare il metodo mouseClicked() nella classe AscoltaClick, in questo metodo inserirai il controllo
 if(numPunti<=punti.length && e.getButton()==BUTTON3)
...
else messaggio="basta così"

così dovrebbe andare, fammi sapere

Titolo: applet java grafico
Inserito da: marcoff il 01 Giugno 2007, 00:31:30
io ci sono ma nn mi intrometto ;)

Ottimo lavoro benny.:)

Titolo: applet java grafico
Inserito da: benna il 02 Giugno 2007, 13:33:06
Grazie Marcoff:)
P.S. Intromettiti pure se vuoi ;)

Titolo: applet java grafico
Inserito da: piketto il 05 Giugno 2007, 11:40:27
nn ci capisco niente cn java :(
se mi potete aiutare vi faccio vedere cosa dovrei svolgere:

dovrei creare una piccola applet java che mi permetta di:
- realizzare un piano cartesiano (FATTO)
- aggiungere con il tasto sinistro del mouse un punto (bene o male fatto)
- togliere un punto con il tasto destro del mouse
- trovare i massimali (realizzarli cn un colore diverso per esempio) e creare una linea frontiera (nella quale ci siano tutti i punti dentro, un confine)

con java non ci capisco molto e questo sarebbe la mia prima applicazione... la griglia a piano cartesiano sono riuscito a farla, ma con le classi del mouse nn mi trovo molto bene...
Titolo: applet java grafico
Inserito da: benna il 06 Giugno 2007, 22:05:58
Ho abbozzato un' applet che esegue quello che hai chiesto, se ci sarà qualche cosa da modificare lo modificheremo ;)
(https://www.forumzone.it/images/misc/attach_legacy.gif) (https://www.forumzone.it/attachment_legacy.php?dir=benna&file=20076622547_Grafico.zip)

Titolo: applet java grafico
Inserito da: piketto il 07 Giugno 2007, 13:19:36
ciao!

inanzitutto grazie per l'aiuto!

l'unica cosa che non riesco a fare, per il resto va benissimo, è togliere un punto con il click del mouse destro. in modo da unire i due punti che si trovano ai suoi lati... si può fare?
Titolo: applet java grafico
Inserito da: piketto il 07 Giugno 2007, 13:21:16
noooooo

scusa! cliccavo io male! apposto!!!
sei un grande! grazie!

un ultima cosa... la linea rossa, può partire dal basso a sinistra invece che dall'alto? e per trovare il punto piu in alto come se può fa (magari farlo di un colore diverso o piu grande)? grazieeeeeeeee




Questo messaggio è stato aggiornato da piketto il 07/06/2007  alle ore  13:24:01
Titolo: applet java grafico
Inserito da: benna il 07 Giugno 2007, 21:16:34
Prego :)
Per modificarlo come hai chiesto devi fare così:
Per far partire la linea dal basso devi andare nel metodo paint e modificare l'inizializzazione di pMenoUno passando al costruttore le coordinate (0,400);
per trovare il punto più alto devi fare un ciclo che scorre il vettore e memorizza l'indice del punto con la y minore (la puoi leggere grazie al metodo getY() della classe Punto) e poi lo ridisegna di un colore diverso.
Per cancellare più facilmente potresti modificare anche il metodo mouseClicked() in modo che cancelli il tasto se le coordinate del mouse sono simili, e non perfettamente uguali, a quelle del punto (la differenza fra le coord del mouse e quelle del punto è minore di X)

Titolo: applet java grafico
Inserito da: piketto il 11 Giugno 2007, 09:12:13
ciao,

un'ultima cosa, è possibile togliere la parte relativa al numero max di punti? ho visto che comunque si inseriscono piu di 10 punti... cosi da mettere punti illimitati, togliendo quella parte di codice in piu...

GRAZIEEEEEEEEE
Titolo: applet java grafico
Inserito da: benna il 11 Giugno 2007, 17:35:24
Hai ragione, ho dimenticato di incrementare la variabile numPunti ogni volta che se ne inserisce uno :o
Comunque quel controllo può essere rimosso senza problemi ;)

Titolo: applet java grafico
Inserito da: piketto il 11 Giugno 2007, 18:51:53
ok... cmq, cosa e dove dovrei inserire per cincremantere la varibile? ultima cosa prometto!
Titolo: applet java grafico
Inserito da: benna il 11 Giugno 2007, 22:03:41
Basta inserire l'istruzione numPunti++; nel metodo mouseClicked
Se ti servisse qualcos'altro io sono sempre qui ;)

Titolo: applet java grafico
Inserito da: piketto il 12 Giugno 2007, 09:16:34
non riesco a fare il ciclo per trovare il massimale...
Titolo: applet java grafico
Inserito da: benna il 12 Giugno 2007, 19:38:31
Ho aggiunto il controllo del numero dei punti ed il disegno del massimale
(https://www.forumzone.it/images/misc/attach_legacy.gif) (https://www.forumzone.it/attachment_legacy.php?dir=benna&file=2007612193825_Grafico.zip)

Titolo: applet java grafico
Inserito da: piketto il 12 Giugno 2007, 20:08:56
GRANDE!
Titolo: applet java grafico
Inserito da: benna il 12 Giugno 2007, 21:32:58
:) figurati

Titolo: applet java grafico
Inserito da: piketto il 13 Giugno 2007, 10:37:30
solo un ultima cosa spero!

l'ultimo va benissimo, solo che dopo aver raggiunto i 10clik non mi fa piu mettere niente, anche se tolgo...
Titolo: applet java grafico
Inserito da: piketto il 13 Giugno 2007, 10:56:08
quello di prima dei piunti ho risolto!

questa parte di codice a cosa è riferita?    public class Punto
   {
      private int X,Y;
      
      public Punto(int x, int y)
      {
         X=x;
         Y=y;
      }
      
      public int getX()
      {
         return X;
      }
      public int getY()
      {
         return Y;
      }
      
      public void paint(Graphics g)
      {
         g.drawRect(X-1,Y-1,2,2);
      }
      
      public boolean equals(Punto p)
      {
         return X==p.getX() && Y==p.getY();
      }
   }
}
Titolo: applet java grafico
Inserito da: piketto il 13 Giugno 2007, 13:56:15
e questa grazie!!!

public void inserctionSort(Vector vettore)
   {
      Punto a,b,tmp;
      for(int i=1;vettore.size()>1 && i         a=(Punto)vettore.elementAt(i);
         for(int j=0;j            b=(Punto)vettore.elementAt(j);
             if(a.getX()              {
                //scambio i punti
                 tmp=a;
                 a=b;
                 b=tmp;
                 vettore.add(i,a);//lo inserisco nella pos corretta                 
vettore.remove(i+1);//elimino il punto che era prima nella i-esima posizione
                 vettore.add(j,b);//lo inserisco nella pos corretta
                 vettore.remove(j+1);//elimino il punto che era prima nella j-esima posizione
              }//if
          }//for interno
      }//for esterno
Titolo: applet java grafico
Inserito da: benna il 13 Giugno 2007, 22:21:20
La classe Punto è la classe che definisce l'oggetto Punto (:D) e i suoi metodi; ho creato questa classe principalmente per gestire in modo elegante il disegno di ciascun punto tramite un solo metodo paint.
Avrei potuto tranquillamente scrivere il programma contenendolo in un unica classe.
Il metodo inserctionSort è l'implementazione dell'omonimo algoritmo di ordinamento e serve per disegnare correttamente le linee fra i punti: senza questo metodo le linee unirebbero i punti in ordine di inserimento e non da sinistra a destra

P.S. La prossima volta usa il tasto edit invece di scrivere dei post consecutivi ;)



Questo messaggio è stato aggiornato da benna il 13/06/2007  alle ore  22:21:59