Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    1,965

    [java]Applicazione testo scorrevole

    Così ho scritto un programma con il compito di far scorrere del testo.
    Solo che non appare niente

    codice:
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    
    public class scorriwords extends JFrame implements Runnable{
    	int x=1,y=1;
    	Thread runner;
    	
    	scorriwords(){
    		super("ScorriWords v.1.0 - Keratox");
    		setBounds(20,10,700,500);
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		JPanel pan = new JPanel();
    		setContentPane(pan);
    		
    		if(runner==null){
    			runner= new Thread();
    			runner.start();
    		}
    	}
    	
    	public void run(){
    		while(true){
    			y--;
    		}
    	}
    	
    	public void paintComponent(Graphics g){
    		Graphics2D g2 = (Graphics2D)g;
    		g2.drawString("Word", x,y);
    	}
    	
    	public static void main(String[] args){
    	      scorriwords sw = new scorriwords();
    	      sw.show();
    	      repaint();	
    	}
    	
    	
    }
    Grazie

    ciao

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,303
    Ho visto il codice e c'erano 3 o 4 errori. Questo è il codice funzionante, anche se non è certo il massimo dell'efficienza:
    codice:
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    
    public class Scorriwords extends JFrame implements Runnable{
    	int x=300,y=300;
    	Thread runner;
    	
    	Scorriwords(){
    		super("ScorriWords v.1.0 - Keratox");
    		setBounds(20,10,700,500);
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		JPanel pan = new JPanel();
    		setContentPane(pan);
    		
    		if(runner==null){
    			runner= new Thread(this);
    			runner.start();
    		}
    	}
    	
    	public void run(){
    		while(true){
    			y--;
                            try {
                               Thread.sleep(50);
                            } catch (Exception e) {}
                            repaint();
    		}
    	}
    	
    	public void paint(Graphics g){
    		Graphics2D g2 = (Graphics2D)g;
                    g2.setColor(SystemColor.control);
                    g2.fillRect(0, 0, getWidth()-1, getHeight()-1);
                    g2.setColor(Color.black);
    		g2.drawString("Word", x,y);
    	}
    	
    	public static void main(String[] args){
    	      Scorriwords sw = new Scorriwords();
    	      sw.show();
    	}
    	
    	
    }
    1) non puoi richiamare repaint() in un contesto statico, dato che è un metodo non statico

    2) Crei un nuovo thread runner che non fa assolutamente niente. Se vuoi utilizzare il frame (Runnable) come thread devi dire a runner di usarlo.

    3) Devi dire al frame di ridisegnarsi ogni volta che diminuisci y, altrimenti lui non richiama il metodo paint()

    4) Usa il metodo paint() e non paintComponent() poichè l'ultimo viene richiamato una sola volta alla creazione.

    5) Aggiungi un intervallo fra un decremento di y e l'altro altrimenti non so se si fa in tempo a vedere la parola scorrere.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    1,965
    Grazie

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    1,965
    MMH.
    Per far si' che si possa muovere la scritta da tastiera, ho usato questo codice

    codice:
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    
    public class scorriwords extends JFrame implements Runnable,KeyListener{
    	int x=10,y=400;
    	Thread runner;
    	
    	scorriwords(){
    		super("ScorriWords v.1.0 - Keratox");
    		setBounds(20,10,700,500);
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		JPanel pan = new JPanel();
    		pan.addKeyListener(this);
    		setContentPane(pan);
    		
    		if(runner==null){
    			runner= new Thread(this);
    			runner.start();
    		}
    	}
    	
    	public void run(){
    		while(true){
    			if(y<2){
    				y=588;
    			}
    			if(y>599){
    				y=4;
    			}
    			try{
    				Thread.sleep(50);
    			}
    			catch(Exception et){			}
    		    repaint();
    		}
    	}
    	
    	public void keyReleased(KeyEvent ker){	}
    	public void keyTyped(KeyEvent ket){ 	}
    	
    	public void keyPressed(KeyEvent kep){
    		int id = kep.getKeyCode();
    		if(id==KeyEvent.VK_KP_DOWN){
    			y+=10;
    			System.out.println("Giu'");
    		}
    		if(id==KeyEvent.VK_KP_UP){
    			y-=10;
    			System.out.println("SU");
    		}
    		if(id==KeyEvent.VK_KP_LEFT){
    			x-=10;
    			System.out.println("SINISTRA'");	
    		}
    		if(id==KeyEvent.VK_KP_RIGHT){
    			x+=10;
    			System.out.println("DESTRA'");
    		}
    		repaint();
    	}
    	
    	public void paint(Graphics g){
    		Graphics2D g2 = (Graphics2D)g;
    		Font fontz = new Font("Courier new", Font.BOLD, 15);
    		g2.setFont(fontz);
    		g2.setBackground(Color.BLACK);
    		g2.setColor(Color.YELLOW);
    		g2.drawString("Word", x,y);
    	}
    	
    	public static void main(String[] args){
    	      scorriwords sw = new scorriwords();
    	      sw.setBackground(Color.BLACK);
    	      sw.show();	
    	}
    	
    	
    }
    Solo che sembra non funzionare

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,303
    Ho controllato la documentazione ed effettivamente ho notato che i codici per i tasti del KeyPad non sono poi così corretti.

    Prova a sostituirli con i tasti delle frecce:

    VK_UP
    VK_DOWN
    VK_LEFT
    VK_RIGHT

    e funziona.

    Devi, però apportare un'aggiunta e una modifica: all'interno di paint() ha poco senso definire come colore di sfondo del Graphics2D il nero. Mettilo come colore di primo piano e ridisegna l'intero rettangolo nero, altrimenti vedrai le sovrapposizioni della parola.



    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    1,965
    Si' in effetto avevo gia' provato sostituendo VK_UP etc..
    ma non funziona ugualmente.

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,303
    A me funziona... sostituendo i codici dei pulsanti. (Io avevo anche rimosso il metodo run(), poi ho vosto che non influiva).



    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    1,965
    Penso ci siano problemi riguardo a KeyListener.
    Ma funziona l'associamento del KeyListener al pannello?

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    1,965
    Io ho sto codice

    codice:
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    
    public class scorriwords extends JFrame implements Runnable,KeyListener{
    	int x=10,y=400;
    	Thread runner;
    	
    	scorriwords(){
    		super("ScorriWords v.1.0 - Keratox");
    		setBounds(20,10,700,500);
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		JPanel pan = new JPanel();
    		pan.addKeyListener(this);
    		setContentPane(pan);
    		
    		if(runner==null){
    			runner= new Thread(this);
    			runner.start();
    		}
    	}
    	
    	public void run(){
    		while(true){
    			if(y<2){
    				y=588;
    			}
    			if(y>599){
    				y=4;
    			}
    			try{
    				Thread.sleep(150);
    			}
    			catch(Exception et){			}
    		    repaint();
    		}
    	}
    	
    	public void keyReleased(KeyEvent ker){
    				System.out.println("Movimento 1:");
    	}
    	public void keyTyped(KeyEvent ket){ 
    	           	System.out.println("Movimento 2:");	
    	}
    	
    	public void keyPressed(KeyEvent kep){
    		System.out.println("Movimento 3:");
    		int id = kep.getKeyCode();
    		if(id==KeyEvent.VK_DOWN){
    			y+=10;
    			System.out.println("Giu'");
    		}
    		if(id==KeyEvent.VK_UP){
    			y-=10;
    			System.out.println("SU");
    		}
    		if(id==KeyEvent.VK_LEFT){
    			x-=10;
    			System.out.println("SINISTRA'");	
    		}
    		if(id==KeyEvent.VK_RIGHT){
    			x+=10;
    			System.out.println("DESTRA'");
    		}
    		repaint();
    	}
    	
    	public void paint(Graphics g){
    		Graphics2D g2 = (Graphics2D)g;
            g2.fillRect(0, 0, getWidth()-1, getHeight()-1);
    		Font fontz = new Font("Courier new", Font.BOLD, 15);
    		g2.setFont(fontz);
    		g2.setColor(Color.YELLOW);
    		g2.drawString("Word", x,y);
    	}
    	
    	public static void main(String[] args){
    	      scorriwords sw = new scorriwords();
    	      sw.setBackground(Color.BLACK);
    	      sw.show();	
    	}
    	
    	
    }
    Ma non mi va

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,303
    Mi ero dimenticato di fornirti una correzione: il metodo addKeyListener devi applicarlo alla finestra non al Panel!

    Sorry per la dimenticanza.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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.