PROGRAMMINO INTERSEZIONE SEGMENTI

di il
3 risposte

PROGRAMMINO INTERSEZIONE SEGMENTI

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();
  					
  							
  				}
  			}
  			

      
    
   }
   }
}




3 Risposte

  • Re: PROGRAMMINO INTERSEZIONE SEGMENTI

    Fammi capire una cosa....l'ho fatto girare...tu vuoi che una volta cliccato sul bottone il segmento relativo cambi colore????
    non si capisce bene dove ti blocchi....

    mario.
  • Re: PROGRAMMINO INTERSEZIONE SEGMENTI

    No che una volta cliccato il bottone relativo al segmento devono cambiare colore tutti i segmenti che si intersecano con quello selezionato.

    cioè se ho creato 5 segmenti, e clicco sul pulsante relativo al segmento numero 3, se il segmento numero 3 si interseca con o 1 o 2 o 4 o 5 questi devono cambiar colore.

    spero di essere stata chiara...e grazie per l'eventuale aiuto
  • Re: PROGRAMMINO INTERSEZIONE SEGMENTI

    Esame dato! mi ha messo 1-2 punti in meno per non aver fatto quella cosa ma amen...cmq per i futuri interessati....

    non mi ha fatto scrivere come si faceva quindi di preciso non lo so ma ha detto però che avrei dovuto farlo con IntersectsLine combinandolo con le condizioni matematiche dell'equazione delle rette...in pratica se un punto di una retta1 soddisfava l'equazione della retta2 allora intersecava, sennò no.
Devi accedere o registrarti per scrivere nel forum
3 risposte