Java help disperato per esame!!

Pubblicità

Shane

Nuovo Utente
Messaggi
7
Reazioni
0
Punteggio
24
Ciao ragazzi, devo realizzare per un esame un programma java che mi permetta di realizzare un triangolo con tre click del mouse.Per ora sono riuscita a realizzare dei punti con i click...per il resto come faccio???
Se devo far partire una linea dal primo al secondo punto cm glielo faccio capire?
Cioè, se il secondo punto lo ottengo con il secondo click, cm traduco tutto ciò in termini di programmazione??
Sbaglio a ragionare così?
c'èun altro metodo forse per fare tutto ciò??
vi prego aiutatemi....grazie:help::inchino::(
 
tu segnati i tre click in tre coppie di numeri così da avere le 3 coppie di coordinate e poi calcoli i 3 segmenti che uniscono i punti a due a due.

che funzioni di disegno hai a disposizione? hai qualcosa che traccia linee o devi calcolarti le equazioni delle rette e disegnare tu punto a punto?
 
no, devo calcolare tutto io. Io ho una finestra e in essa devo riuscire a disegnare un triangolo dove voglio io mediante tre click...qullo che nn capisco é..se un click equivale alla ricezione di un evento e.getX()...ecc, un secondo evento cm lo kiamerò?
esiste un modo per numerare gli eventi?
 
un click = getX e getY
alla fine tenendo un contatore "ciclico" puoi registrare N click e memorizzare i dati...
a livello teorico:
- contatore = -1;
- click => contatore = (contatore +1) % 3 => x[contatore] = getX, y [contatore] = getY

poi il calcolo delle equazioni delle rette è immediato
 
airex salvami!!!!!

:cav: cm faccio a costruirmi un contatore????
io sn una vera ignorante in materia con la I maiuscola!
 
un contatore è una vriabile come qualsiasi altra, differesce da esse solo perchè tu a livello "logico" la utilizzi per tale scopo ...
 
dove sbaglio???

:boh:
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.*;
import javax.swing.JComponent;
import java.awt.event.*;
import java.util.*;
public class TriangoloComponent extends JComponent{

private static final int BASE = 8;
private ArrayList <MouseEvent> contatoreClick;
private int x;
private int y;
private int x1;
private int y1;
private int x2;
private int y2;
private Ellipse2D.Double r1;
private Ellipse2D.Double r2;
private Ellipse2D.Double r3;
private Line2D.Double l1;
private Line2D.Double l2;
private Line2D.Double l3;
private Point2D.Double p1;
private Point2D.Double p2;
private Point2D.Double p3;

public TriangoloComponent(){
this.addMouseListener(new MouseClickListener());
}

public int conta(MouseEvent e) {

int click = 0;
for (MouseEvent c : contatoreClick)
{
if((e.getX() & e.getY())< 3) click ++;
}
return click;
}


class MouseClickListener extends MouseAdapter{
public void mouseClicked (MouseEvent e){
TriangoloComponent tri= (TriangoloComponent)e.getSource();
Graphics g = tri.getGraphics();
Graphics2D g2 = (Graphics2D) g;


int x = e.getX();
int y = e.getY();
int x1 = e.getX() +x;
int y1 = e.getY()+y;
int dx = x1 + 1;
int dy = y1 + 1;
int x2 = e.getX() +dx;
int y2 = e.getY() +dy;



Ellipse2D.Double r1 = new Ellipse2D.Double(x,y,BASE, BASE);
Ellipse2D.Double r2 = new Ellipse2D.Double(x1,y1,BASE, BASE);
Ellipse2D.Double r3 = new Ellipse2D.Double(x2,y2,BASE, BASE);
Point2D.Double p1= new Point2D.Double(x,y);
Point2D.Double p2= new Point2D.Double(x1,y1);
Point2D.Double p3= new Point2D.Double(x2,y2);
Line2D.Double l1 = new Line2D.Double(p1,p2);
Line2D.Double l2 = new Line2D.Double(p2,p3);
Line2D.Double l3 = new Line2D.Double(p3,p1);



g2.draw(r1);
g2.fill(r1);
g2.draw(r2);
g2.fill(r2);
g2.draw(l1);


}
}


public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.draw(r1);
g2.fill(r1);
}
}


import javax.swing.*;
import java.awt.event.*;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.*;
public class TriangoloComponentViewer extends JFrame {

public static void main(String[] args){

final TriangoloComponent component = new TriangoloComponent();

JFrame frame = new JFrame();
frame.add(component);
frame.setTitle("Triangoli");
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setExtendedState(MAXIMIZED_BOTH);
frame.setVisible(true);
}
}
 
due richieste:
1- quando fai copia e incolla del codice mettilo tra [code ] e [/ code] (senza lo spazio)
2- spiagaci anche la tua logica che sta dietro ai vari metodi e come vorresti usarli

sistemate queste 2 cose sarà piu' facile dare aiuti e arrivare ad una soluzione
 
se esegui il main, vedi che fino a ora sono riuscita solo a ottenetere un punto e una retta con un click,non riesco più ad andare avanti ne a capire cosa sbaglio...

ti ringrazio tanto...
 
Ultima modifica da un moderatore:
qualche domanda:
1. la funzione "conta" davvero non la capisco ... cosa ti serve sapere se la X e Y in AND binario danno un numero inferiore a 3 e come logicamente colleghi cio' alla gestione del contatore???
2. negli if & NON è l'operatore logico AND ma l'operatore binario AND, molto diverso! per avere l'AND logico devi usare &&
3. ka funzione "mouseClicked" è anch'essa oscura ... prendi x e y di un punto, ad esse sommi ancora se stesse e poi prendi un terzo punto che a distanza sqrt(2) da quest'utlimo ... perchè???

Intanto che ci sei spiega logicamente quello che vorresti fare e vediamo se e dove c'è errore e poi sistemiamo anche il codice
 
allora..fai finta che la funziona conta nn ci sia. toglila, io stavo cercando di creare un array e memorizzarvi dentro tre click, ma è evidentemente sbagliato (tu mi avevi detto di kreare un contatore giusto?)
Nella funzione mouseclicked...beh anke quella è ovviamente sbagliata, in essa l'unica cosa esatta è quella ke mi da un punto(se hai provato ad eseguire il programma a ogni click ottengo praticamente un intero segmento e nn è quello che voglio.)
Nel frammento oscuro cercavo solo di fare in modo di associare al 2° punto del triagolo un seconodo evento del mouse e quindi provavo a sommargli qlcs ma il risultato è stato una catastrofe...
se nn potete aiutarmi fa niente ho apprezzato il vostro sostegno..!
 
se cerchi il codice già pronto mi sa che non lo avrai non per incapacità di dartelo ma perchè non avrebbe senso a livello didattico dare già la soluzione, meglio dare i "mattoni" per costruirsela da se ;)

ora qualche idea:
- tieniti una variabile (contatore - C) che ti dice quale punto stai prendendo sul click
- crei due array, puntiX e puntY, di 3 elementi
- inizializzi C a -1 (giusto per dire che nn hai cliccato mai)
- ad ogni click del mouse incrementi C, se C diventa superiore a 2 resetti C e lo metti a 0
- memorizzi in puntiX[C] in valore di getX e in puntiY[C] il valore di getY
- quando C diventa 2 e hai memorizzate le coordinate del terzo punto (C=0 primo punto, C=1 secondo punto, C=2 terzo punto) fai partire la routine che traccia le linee

Che ne dici?
 
ok adesso ho le idee più chiare, provo a sviluppare questo procedimento...
il fatto è che questo è il mio primo ( e sarà anche l'ultimo) approccio con java perchè studio ingegneria edile-arkitettura, nn credo che mi troverò mai + a programmare nella vita e questo esame è a detta di molti un "corpo estraneo" nel corso di studi, cmq devo fare questo esame!!
grazie mille ancora..
 
Pubblicità
Pubblicità
Indietro
Top