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

    Simulazione disco slot machine

    Salve a tutti, faccio questo primo post dove dimostrerò tutta la mia niubbaggine attuale .
    Allora il mio problema è che devo simulare il funzionamento di un disco di una slot machine, per fare ciò graficamente avevo pensato di utilizzare una JTextArea per simulare l'area del disco.
    Ora, usando questa piccola porzione di codice:
    for(int n =1;n<10;n++){
    String m = String.valueOf(n).toString();
    t1.setText(m);
    naturalmente nella textArea mi viene visualizzato solo il numero 9, il mio problema è, come faccio a visualizzare tutti i numeri nella textarea simulando cosi una rotazione?

    Ringrazio tutti delle eventuali risposte e non insultatemi troppo per l'ignoranza ma sto imparando :P

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Simulazione disco slot machine

    Originariamente inviato da francydev
    come faccio a visualizzare tutti i numeri nella textarea simulando cosi una rotazione?
    Dovresti chiarire cosa intendi per "rotazione". Cioè precisare a livello proprio "visivo" cosa vuoi che accada.
    In una slot machine so che i numeri o le figure scorrono verticalmente (ora non so dire in che senso ). Ma un JTextArea visualizza del testo puro. Il contenuto di un JTextArea si può anche "scorrere", se messo (come è tipico) dentro un JScrollPane tramite le apposite scrollbar. Ma .... centrerebbe qualcosa?

    Forse sarebbe meglio se non usi un componente di testo ma "disegni" tu le cifre (caratteri o immagini che visualizzano una cifra) su un tuo componente in modo da simulare la rotazione. Con un timer fai in modo che una cifra venga stampata ad una posizione x,y poi poco dopo x,y+1, poi x,y+2 ecc....

    Ovviamente non è "banale" e bisognerebbe vedere il tuo livello di conoscenza di AWT/Swing.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    no più che altro la mia idea era quella di far comparire i numeri uno alla volta nella textArea, arrivando al nove e poi ripartendo.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da francydev
    no più che altro la mia idea era quella di far comparire i numeri uno alla volta nella textArea, arrivando al nove e poi ripartendo.
    Se è solo questo .... basta di nuovo un timer (javax.swing.Timer per la precisione) e all'evento del timer fai "avanzare" la cifra (eventualmente facendo il "giro" se necessario).
    Quante volte fare il ciclo, per quanto tempo e con quale velocità ... lo puoi stabilire ovviamente tu.

    E come componente potresti anche usare un JTextField (tanto basta 1 riga, no?) o ancora più semplicemente un JLabel.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Grazie per l'aiuto, mi vedo un po questa classe Timer vedo che cosa riesco a fare.

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755
    eccoti un semplice e "rudimentale" mio esempio per il tuo programma(l'ho fatto al volo senza riguardarlo,possono esserci inefficienze o anche errori)

    codice:
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.util.*;
    import javax.swing.Timer;
    
    class Ruota extends JFrame implements ActionListener{
    	private JLabel l;
    	private JButton jb;
    	private Timer t;
    
    	public Ruota() throws Exception{
    		super("Ruota");
    		UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
    		Container c=getContentPane();
    		l=new JLabel();
    		jb=new JButton("mischia");
    		jb.addActionListener(this);
    		JPanel panel=new JPanel();
    		panel.setPreferredSize(new Dimension(100,100));
    		panel.setBackground(Color.ORANGE);
    		panel.add(l,BorderLayout.CENTER);
    		l.setHorizontalAlignment(JLabel.CENTER);
    		c.add(jb,BorderLayout.NORTH);
    		c.add(panel,BorderLayout.CENTER);
    		t=new Timer(500,this);
    		t.start();
    		pack();
    		setVisible(true);
    	}
    	public void actionPerformed(ActionEvent e){
    		if(e.getSource()==jb&&t.getDelay()!=0){
    				javax.swing.SwingUtilities.invokeLater(new Runnable() {
    				            public void run() {
    								l.setText(new Random().nextInt(10)+"");
    								t.setDelay(t.getDelay()-1);
    								actionPerformed(new ActionEvent(jb,0,null));
    								System.out.println("delay= "+t.getDelay());
    				            }
                    });
    		}else{
    			t.setDelay(500);
    		}
    	}
    	public static void main (String [] args) {
    		javax.swing.SwingUtilities.invokeLater(new Runnable() {
    						            public void run() {
    										try{
    											new Ruota();
    										}catch(Exception ex){
    											ex.printStackTrace();
    										}
    						            }
            });
    	}
    }
    Ps. invece che un ciclo for con i numeri ordianati ho fatto una generazione di numeri casuali!

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.