Salve a tutti, mi servirebbe un grosso aiuto per un esame (ho solo questo benedetto esame di informatica!!)... Sono una stra principiate del linguaggio Java...ho seguito questo corso e ora devo dare l'esame.Ecco il mio esame: Dovevo creare una finestra dove disegnare, cliccandone gli estremi, dei segmenti che avrebbero fatto comparire dei bottoni relativi ad ognuno di essi, in modo che cliccandoli si fossero visti gli estremi e la lunghezza del segmento. e fino a qui..ce l'ho fatta...ora....devo anche, una volta cliccato il bottone, fare in modo che i segmenti che intersecano il segmento cliccato cambino colore.....e...NON LO SO FARE!!!! lo so che in praitca sto chiedendo di fare una parte di programma ma non so dove sbattere la testa!!! GRAZIEEE per l'aiuto!
vi posto parte del codice scritto che tra le altre cose è lunghissimo, ho tolto delle cose solo per accorciarlo tanto al fine del mio probelma non servivano...
..........
private JButton[] bs=new JButton[numerosegmenti]; //bottoni segmenti
public Finestra() {
.........
for (int i=0 ; i<numerosegmenti ; i++) { //ciclo for che crea tanti pulsanti quanti segmenti sono creati associando ad ognuno il listener
bs[i]= new JButton();
bs[i].addActionListener(new ListenerBottSegm(i));
bs[i].setBackground(Color.GRAY);
bs[i].setPreferredSize(new Dimension(130,20));
sd.add(bs[i]);
bs[i].setVisible(false); //sono invisibili perchè devono comparire solo quando i segmenti sono disegnati
}
...........
/* Classe con il metodo per poter disegnare */
private class StrumentoDisegno extends JPanel {
public void paintComponent (Graphics g){
super.paintComponent(g);
Graphics2D g2=(Graphics2D)g;
estremo1=new Ellipse2D.Double(x1-7,y1-7,14,14); //creazione cerchietti, le coordinate sono scritte così perchè il cerchio è iscritto in un quadrato!
estremo2=new Ellipse2D.Double(x2-7,y2-7,14,14);
if (testcolore == Color.BLUE) { //con questa condizione vedo SOLO le linee
for (int j=0 ; j<w ; j=j+2) { // j+2 perchè sennò avrei la costruzione di una spezzata
segmenti=new Line2D.Double(X[j],Y[j],X[j+1],Y[j+1]); //creazione linea
g2.setColor(testcolore); // cioè blu
g2.setStroke(new BasicStroke (2.0f));
g2.draw(segmenti);
}
}
else {
for (int j=0 ; j<w ; j=j+2) { // se la variabile testcolore non è blu (è nera, si vedrà dopo) vengono disegnati sia i segmenti sia i cerchi
segmenti=new Line2D.Double(X[j],Y[j],X[j+1],Y[j+1]);
g2.setColor(Color.BLUE); //voglio che i segmenti mi rimangano blu...
g2.setStroke(new BasicStroke (2.0f));
g2.draw(segmenti);
}
g2.setColor(testcolore); //...invece i cerchi e la scritta sono del colore della variabile (BLACK,come mi svedrà dopo)
g2.draw(estremo1);
g2.draw(estremo2);
double calcololunghezza= Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)); //metodo math che calcola la lunghezza che mi restituisce un double...
int totale= (int)calcololunghezza; // ....ma io lo sto forzando per essere un int, sto facendo un operazione di cast!
g2.setFont(new Font("Times New Roman",Font.PLAIN,16));
g2.drawString(" Lunghezza :" + totale + " pixels" , x1+7,y1+7);
}
}
}
..................
private class ListenerBottSegm implements ActionListener { //listener per i bottoni
int a2;
public ListenerBottSegm(int a1) { // a1=paramentro del listener,in pratica il numero di un certo bottone
a2=a1;
}
public void actionPerformed (ActionEvent event) { //i cerchietti vengono messi in corrispondenza degli estremi
/* posizioni array */
bsegm=a2;
x1= X[2*a2]; //pari
y1= Y[2*a2]; //pari
x2= X[2*a2+1]; //dispari
y2= Y[2*a2+1]; //dispari
testcolore= Color.BLACK; // il colore è BLACK!! infatti si devono vedere i cerchietti e la scritta (vedi paintComponent)
sd.repaint();
}
}
}
}
}