Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [Java] Problema libreria grafica swing

    Ciao a tutti, sto facendo un programmino java formato da una matrice di bottoni, e ogni bottone della matrice deve cambiare colore in base a un altra matrice che contiene interi.
    (Utilizzo bottoni perchè in fututo dovrei collegare degli eventi ad essi)

    codice:
    	private Casella[][] Griglia = new Casella[SIZE][SIZE];
    codice:
    	private Casella[][] Griglia = new Casella[SIZE][SIZE];
    il colore dei bottoni deve essere cambiato all'infinito tramite un ciclo while(true) per creare una specie di effetto visivo, il prblema sta nel fatto che se eseguo il codice senza ciclo mi visualizza la finistra mentre se provo a fare il ciclo non la visualizza più, ho provato in tantissimi modi ma non riesco, se qualcuno ha qualche consiglio.. grazie mille.
    questo è il codice:

    codice:
    private void esegui(){
       //while(true){
         for (int i=0; i<SIZE; i++){
           for(int j=0; j<SIZE;j++){
              Values[i][j]=(int)(Math.random()*10);
              System.out.print(Values[i][j] + " ");
              if(Values[i][j]%2==0)
                   Griglia[i][j].setBackground(Color.blue);
              else
    	 Griglia[i][j].setBackground(Color.white);
            }
          System.out.println();
        }
      //}
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755
    E' una questione di thread..probabilmente richiami il metodo "esegui" prima di visualizzare l'interfaccia (per interfaccia in questo caso mi riferisco al visualizzare il frame) e ovviamente essendo il tuo metodo un loop infinito tiene il thread relativo perennemente occupato impedendo di eseguire le istruzioni successive al "lancio" del metodo "esegui"..

    Le soluzioni sono varie , puoi lanciare il metodo dopo aver visualizzato il frame (il "setVisible (true) ) oppure richiami il tuo metodo da un altro thread (con relativo Runnable , run , corpo del run , e start al thread )


  3. #3
    grazie milleeeeeee ora funziona!!
    non avevo messo l'istruzione setVisible(true);

    certo che questo while(true) continua a darmi problemi. sono andato avanti con il prgramma e ho aggiunto uan serie di bottoni di fianco la matrice e sono riuscito a differenziare l'evento (devo ancora implementare bene questa parte) in base al bottone che si clicca.
    ho aggiunto questa parte di codice:
    codice:
    private static class MyButtonListener implements ActionListener {
    		public void actionPerformed(ActionEvent evt) {
    			
    			//int buttonIndex = (new Integer(evt.getActionCommand())).intValue();
    			
    			switch(evt.getActionCommand()){
    			case "Pausa": System.out.print("1"); break;
    			case "Riprendi": System.out.print("2"); break;
    			}
    		
    		}
    	}
    
    
    public void disegnaIPulsanti(){
    		
    		int i=0, x=0;
    		
    		String[] nomeBottone = {"Pausa", "Riprendi", "Controllo data", 
    				"Aggiungi tempo", "Anno bisestile", "Settimana del mese",
    				"Settimana dell'anno", "Giorno dell'anno"};
    		
    		for(int j=0; j<bottoni.length;j++)
    			bottoni[j] = new JButton();
    		
    		for(JButton b:bottoni){
    			
    			b.setBounds(Griglia[0].length*Casella.DIMENSIONE+ 100, i , 140, 50);
    			b.setBackground(Color.gray);
    			b.setText(nomeBottone[x]);
    			
    			MyButtonListener listener = new MyButtonListener();
    			b.addActionListener(listener);
    			
    			getContentPane().add(b);
    			b.setVisible(true);
    			i+=60;
    			x++;
    		}
    	}
    questo prima del ciclo while(true) e si occupa di creare tutti i pulsanti.
    solo che mi trovo un problema simile ovvero:

    se tolgo il while(true) i bottoni reagiscono mentre se lo metto quando clicco sui bottoni non succede niente.. penso che sia per il fatto che il programma restando dentro il ciclo
    non riconosce l evento click.. tu sapresti come fare? esiste un codice che faccia questo?

    grazie mille ancora..

  4. #4
    tipo un b.setEnable()?

  5. #5
    Risolto!
    Grazie mille ancora ciao!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.