Hai ragione. Scusa tanto.
Allora, spero di essere completo. io ora ho 3 file di tipo .java, e uno chiamato Ellisse.html che mi apre l'applet di dimensione 700 (larghezza) e 500 (altezza).
I 3 file .java sono:
1)Ellisse.java
import javax.swing.JApplet;
import java.awt.*;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.awt.Color;
import java.awt.Shape;
import java.awt.Font;
import java.awt.event.MouseEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseMotionAdapter;
import java.awt.geom.Ellipse2D;
import javax.swing.JOptionPane;
public class Ellisse extends JApplet{
private EllissiFerme miaEllisse;
int n;
int[] x= new int[500];
int[] y= new int[500];
private Ellipse2D.Double ellisseCorrente;
private double inizioX;
private double inizioY;
private Point2D.Double inizio;
public Ellisse() {
String s;
s = JOptionPane.showInputDialog(null, "digita il numero di punti");
n = Integer.parseInt(s);
for(int i=0; i<n;i++)
{
x[i]=(int)(700*Math.random());
y[i]=(int)(500*Math.random());
}
miaEllisse = new EllissiFerme(50,n);
class AscoltaClick extends MouseAdapter
{
public void mousePressed(MouseEvent e)
{
inizioX = e.getX();
inizioY = e.getY();
ellisseCorrente = new Ellipse2D.Double(inizioX, inizioY, 0, 0);
repaint();
}
public void mouseReleased(MouseEvent e)
{
Ell nuovaEllisse = new Ell(ellisseCorrente, Color.black);
miaEllisse.aggiungi(nuovaEllisse,x,y,n);
ellisseCorrente = null;
repaint();
}
}
class AscoltaMovimento extends MouseMotionAdapter
{
public void mouseDragged(MouseEvent e)
{
int x1 = e.getX();
int y1 = e.getY();
ellisseCorrente = new Ellipse2D.Double(inizioX, inizioY,x1-inizioX,y1-inizioY);
repaint();
}
}
MouseAdapter ascoltaEventi = new AscoltaClick();
addMouseListener(ascoltaEventi);
MouseMotionAdapter ascoltaMosse = new AscoltaMovimento();
addMouseMotionListener(ascoltaMosse);
}
public void paint(Graphics g)
{
Graphics2D g2 = (Graphics2D) g;
g2.clearRect(0,0,getWidth(),getHeight());
g.setColor(Color.black);
for(int i=0;i<n;i++){
g.fillOval(x[i],y[i],5,5);}
if(ellisseCorrente!=null)
g2.draw(ellisseCorrente);
miaEllisse.disegna(g2);
}
}
Gli altri 2 file che vengono richiamati dal primo sono:
2)Ell.java
import java.awt.Graphics2D;
import java.awt.Color;
import java.awt.Shape;
import java.awt.geom.Ellipse2D;
public class Ell{
private Color colore;
private Ellipse2D.Double elemento;
public Ell(double x, double y, double largh, double alt, Color col) {
elemento = new Ellipse2D.Double(x, y,largh,alt);
}
public Ell(Ellipse2D.Double r, Color colore) {
this(r.getX(), r.getY(), r.getWidth(), r.getHeight(), colore);
}
public void disegna(Graphics2D g2) {
g2.draw(elemento);
}
ED anche
3)EllissiFerme.java
import java.awt.Graphics2D;
public class EllissiFerme {
private int[] contatore;
private Ell[] ovali;
private int numEllissi;
public EllissiFerme(int v,int n) {
ovali = new Ell[v];
contatore = new int[n];
numEllissi = 0;
}
public void aggiungi(Ell nuovoOvale,int x[], int y[], int n){
if(numEllissi < ovali.length) {
ovali[numEllissi] = nuovoOvale;
for(int i=0;i<n;i++)
{
contatore[i]++;
}
numEllissi++;
}
}
public void disegna(Graphics2D g2) {
for(int i=0; i<numEllissi; i++)
ovali[i].disegna(g2);
}
}
}
Ora tornando al problema che volevo illustrarvi è:
1) Normale che le Ellissi che traccio posso tracciarle solo andando verso destra/basso dal momento che clicco con il mouse? come riuscire a tracciare in tutti i sensi?
2) Come formare un ciclo che mi controlla che tutti gli N punti inseriti all'inizio siano interni o esterni per ogni ellisse?
Grazie mille