Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    196

    [JAVA] Timer

    Il programma apre una finestra che genera linee con alcune proprietà randomizzate. Vorrei però far disegnare una linea ogni secondo, come devo usare il timer? non riesco a farlo

    codice:
    import java.awt.*;
    import javax.swing.*;
    import javax.swing.event.*;
    import java.awt.event.*;
    
    public class Ex3 extends JFrame{
    
    	public int WIDTH = 400;
    	public int HEIGHT = 400;
    					
    	public Ex3(){
    		
    		Container c = this.getContentPane();
    		this.setBackground(Color.WHITE);
    		
    		Toolkit tk = Toolkit.getDefaultToolkit();
    		int SCREEN_W = tk.getScreenSize().width;
    		int SCREEN_H = tk.getScreenSize().height;
    		this.setBounds((SCREEN_W - WIDTH)/2,(SCREEN_H - HEIGHT)/2,WIDTH,HEIGHT);
    		this.setTitle("Esercizio 1");
    		this.setVisible(true);
    		Dimension size = getSize();
    		
    	}
    	public void paint(Graphics g){
    		Dimension size = getSize();
    		int x,y,x1,y1;
    		float[] stroke = {2.0f,3.0f,4.0f,5.0f};
    		
    		 for(int i = 0;i<=100;i++) {
    			x = (int)(Math.random()*(size.width-30)); 
    			y = (int)(Math.random()*(size.width-30));
    			Graphics2D g2d = (Graphics2D)g;
    			/* Per ottenere le linee con gradienti
    			  Color g1 = new Color((int)(Math.random()*256),(int)(Math.random()*256),(int)(Math.random()*256));
    			Color g2 = new Color((int)(Math.random()*256),(int)(Math.random()*256),(int)(Math.random()*256));
    			g2d.setPaint(new GradientPaint(x,y,g1,(size.width-30)-x,(size.width-30)-y,g2,true));
    			*/
    			g.setColor(new Color((int)(Math.random()*256),(int)(Math.random()*256),(int)(Math.random()*256)));
    			float s = stroke[(int)(Math.random()*3)];
    			g2d.setStroke(new BasicStroke(s));
    			g.drawLine(x,y,(size.width-30)-x,(size.width-30)-y);
    			
    			}
    				
    		}
    	public static void main(String[] args) {
    		Ex3 app = new Ex3();
    		app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	}
    
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    196
    ho provato a fare anche un prog semplice sui timer ma non funziona, mi spiegate come si usano e come correggere il seguente prog?
    codice:
    import java.awt.*; 
    import javax.swing.*; 
    
    public class prova { 
    public static void main(String[] args) { 
      
      timer = new Timer(1000,new ActionListener() { 
       public void actionPerformed(ActionEvent e){ 
        System.out.println("Prova"); 
       }}); 
    
    } 
    }

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Timer è pure troppo per quel che devi fare: ho aggiunto un paio di righe al tuo programma

    codice:
    import java.awt.*;
    import javax.swing.*;
    import javax.swing.event.*;
    import java.awt.event.*;
    
    public class Ex3 extends JFrame{
    
            public int WIDTH = 400;
            public int HEIGHT = 400;
    
            public Ex3(){
    
                    Container c = this.getContentPane();
                    this.setBackground(Color.WHITE);
    
                    Toolkit tk = Toolkit.getDefaultToolkit();
                    int SCREEN_W = tk.getScreenSize().width;
                    int SCREEN_H = tk.getScreenSize().height;
                    this.setBounds((SCREEN_W - WIDTH)/2,(SCREEN_H - HEIGHT)/2,WIDTH,HEIGHT);
                    this.setTitle("Esercizio 1");
                    this.setVisible(true);
                    Dimension size = getSize();
                    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            }
            public void paint(Graphics g){
                    Dimension size = getSize();
                    int x,y,x1,y1;
                    float[] stroke = {2.0f,3.0f,4.0f,5.0f};
    
                     for(int i = 0;i<=100;i++) {
                            x = (int)(Math.random()*(size.width-30)); 
                            y = (int)(Math.random()*(size.width-30));
                            Graphics2D g2d = (Graphics2D)g;
                            /* Per ottenere le linee con gradienti
                              Color g1 = new Color((int)(Math.random()*256),(int)(Math.random()*256),(int)(Math.random()*256));
                            Color g2 = new Color((int)(Math.random()*256),(int)(Math.random()*256),(int)(Math.random()*256));
                            g2d.setPaint(new GradientPaint(x,y,g1,(size.width-30)-x,(size.width-30)-y,g2,true));
                            */
                            g.setColor(new Color((int)(Math.random()*256),(int)(Math.random()*256),(int)(Math.random()*256)));
                            float s = stroke[(int)(Math.random()*3)];
                            g2d.setStroke(new BasicStroke(s));
                            g.drawLine(x,y,(size.width-30)-x,(size.width-30)-y);
                            try {
                              Thread.sleep(1000);
                            }
                            catch (Exception e) {}
    
                            }
    
                    }
            public static void main(String[] args) {
                    Ex3 app = new Ex3();
                    app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            }
    
    }
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2005
    Messaggi
    196
    puoi spiegarmi plz la prima modifica? non ho capito come mai chiudi il frame. Poi per quanto riguarda la seconda, c'è modo di usare i timer invece dei thread? anche pkè vorrei imparare a usarli

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 © 2025 vBulletin Solutions, Inc. All rights reserved.