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?
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
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
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
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!
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
io ci sono ma nn mi intrometto ;)
Ottimo lavoro benny.:)
Grazie Marcoff:)
P.S. Intromettiti pure se vuoi ;)
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...
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)
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?
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
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)
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
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 ;)
ok... cmq, cosa e dove dovrei inserire per cincremantere la varibile? ultima cosa prometto!
Basta inserire l'istruzione numPunti++; nel metodo mouseClicked
Se ti servisse qualcos'altro io sono sempre qui ;)
non riesco a fare il ciclo per trovare il massimale...
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)
GRANDE!
:) figurati
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...
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();
}
}
}
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
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