Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2004
    Messaggi
    88

    pulsante particolare [JAVA]

    ragazzi sicuramente voi saperete risolvere facilmente il mio problema.
    voglio realizzare un pulsante che tenendo lo premuto mi incremente una certa variabile così da da nn dover cliccar un milione di volte.

    che tipo di listener devo implementare e se potte mi fate un esempio?

    questo è il mio pulsante da modificare:
    codice:
    JButton hmore = new JButton();
    		hmore.setBorder(border);
    		hmore.setIcon(Image.getIcon(Image.CLOCK_UP));
    		hmore.setBackground(Color.BLACK);
    		hmore.addActionListener(new ActionListener(){
    			public void actionPerformed(ActionEvent e){
    				hh=hh+1;
    				redo();
    			}
    		});

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123

    Re: pulsante particolare [JAVA]

    Originariamente inviato da draghe
    ragazzi sicuramente voi saperete risolvere facilmente il mio problema.
    voglio realizzare un pulsante che tenendo lo premuto mi incremente una certa variabile così da da nn dover cliccar un milione di volte.

    che tipo di listener devo implementare e se potte mi fate un esempio?

    questo è il mio pulsante da modificare:
    codice:
    JButton hmore = new JButton();
    		hmore.setBorder(border);
    		hmore.setIcon(Image.getIcon(Image.CLOCK_UP));
    		hmore.setBackground(Color.BLACK);
    		hmore.addActionListener(new ActionListener(){
    			public void actionPerformed(ActionEvent e){
    				hh=hh+1;
    				redo();
    			}
    		});
    Devi utilizzare per forza un bottone?
    La prima cosa che mi viene in mente è provare a metterci un mouseReleased(MouseEvent), così da incrementare il valore sino al rilascio del pulsante..

    In alternativa puoi guardare quest'altro componente http://java.sun.com/docs/books/tutor...s/spinner.html

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2004
    Messaggi
    88
    sisi devo usare per forza un bottone dato che sto creando un'applicazione grafica.
    come lo implementeresti il listener che hai detto?

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

    Re: pulsante particolare [JAVA]

    Originariamente inviato da draghe
    voglio realizzare un pulsante che tenendo lo premuto mi incremente una certa variabile così da da nn dover cliccar un milione di volte.
    Vuoi che tenendo premuto venga fatto qualcosa più volte in modo ripetuto ogni tot di tempo (più o meno alla stregua di cosa succede tenendo premuto un tasto)?? Allora innanzitutto hai bisogno di un timer.

    Per ricevere notifica di pressione/rilascio del pulsante in modo "pulito" (non con MouseListener che è a livello più "basso"!) mi viene in mente di usare un ChangeListener e il ButtonModel e verificare il cambio del flag "pressed":

    codice:
    tuoButton.addChangeListener(new ChangeListener() {
        private boolean lastPressed = false;
    
        public void stateChanged(ChangeEvent e) {
            ButtonModel model = tuoButton.getModel();    // Eventualmente il JButton anche dal source con getSource().
    
            if (!lastPressed && model.isPressed()) {
                // .... premuto, fai qualcosa
            } else if (lastPressed && !model.isPressed()) {
                // .... rilasciato, fai qualcosa
            }
    
            lastPressed = model.isPressed();
        }
    });
    Ma ripeto: hai 1 evento per la pressione e 1 per il rilascio, se vuoi fare qualcosa di ripetuto a brevi intervalli di tempo devi usare un timer (es. javax.swing.Timer).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2004
    Messaggi
    88
    mi puoi fare un esempio di come va usata la classe timer

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da draghe
    mi puoi fare un esempio di come va usata la classe timer
    Timer semplicemente lo istanzi passando il tempo di delay e un ActionListener, il actionPerformed() verrà invocato ogni tot di tempo.

    How to Use Swing Timers
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2004
    Messaggi
    88
    anche se tu me lo hai spiegato in due righe, quindi presuppongo sia semplicissimo, nn sono riuscito. potresti farmi l'implementazione sul codice del mio bottone

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Originariamente inviato da draghe
    anche se tu me lo hai spiegato in due righe, quindi presuppongo sia semplicissimo, nn sono riuscito. potresti farmi l'implementazione sul codice del mio bottone
    Io non ho utilizzato ciò che ha detto lui, anche se sarebbe decisamente meglio.. comunque ho fatto questo:

    codice:
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    
    /*
     * Un esempio decisamente migliorabile con i Timer di swing
     * tuttavia e' funzionante.
     */
    
    
    class ButtonInc extends JFrame implements Runnable {
      private static int val=0;
      private boolean suspend = false;
      Thread t;
      JTextField campo;
      
      ButtonInc() {
        super("TestIncrement");
    	
    	JPanel pannello = new JPanel();
    	campo = new JTextField(20);
    	JButton bottone = new JButton("Click");
    	
    	// Creo un thread e lo avvio.
    	t = new Thread(this);
    	t.start();
    	
    	bottone.addMouseListener(new MouseListener() {
    	 synchronized public void mousePressed(MouseEvent me) {
    	    // Riprendo il conteggio
            riprendi();
          }
    	  
    	  public void mouseReleased(MouseEvent me) {
    	    // Sospendi il conteggio
    	    sospendi();
    		// Mostro il risultato nella JTextField
    		campo.setText(""+val);
    	  }
    	  
    	  // Questi non ci servono
    	  public void mouseClicked(MouseEvent me) {}
    	  public void mouseEntered(MouseEvent me) {}
    	  public void mouseExited(MouseEvent me) {}
    	});
    	
    	pannello.add(bottone);
    	pannello.add(campo);
    	add(pannello);
    	
    	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      }
      
      synchronized private void riprendi() {
        suspend = false;
    	// riprendo il thread
    	notify();
      }
      
      private void sospendi() {
        suspend = true;
      }
      
      public void run() {
        try {
    	  while(true) {
    	    // Incremento la variabile
            val++;
    	  
    	    synchronized(this) {
    	      while(suspend) {
    		    // Sospendo il thread
    	        wait();
    	      }
    	    }
          }
        } catch(InterruptedException ie) {}
      }
      
      public static void main(String args[]) {
        try {
          SwingUtilities.invokeAndWait( new Runnable() {
            public void run() {
    	      makeGUI();
    	    }
          });
        } catch(Exception exc) {}
      }
      
      public static void makeGUI() {
        ButtonInc bi = new ButtonInc();
    	bi.pack();
    	bi.setVisible(true);
      }
    }
    Credo sia questo che intendi, provalo e modificatelo come vuoi ^^

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.