Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    68

    non risconosce il click del mouse

    Ciao a tutti. Ho il seguente problema: ho creato una classe che implementa MouseListener. Ho fatto l'override del metodo mouseClicked(MouseEvent evt) e vorrei che al click verifichi l'istanza dell'oggetto cliccato: se è di tipo JCalendar stampi "ciao" altrimenti "buongiorno". Il problema è che quando clicco su qualsiasi parte del mio frame non fa niente. Ecco il codice:

    codice:
    public class GuiWindowAgenda implements MouseListener  {     	        	
         JFrame frame = new JFrame("Agenda");        	  
         JTextField display = new JTextField();
         JCalendar calendar = new JCalendar();
    
         ...
    
        public void mouseClicked(MouseEvent evt) {
    	Object src = evt.getSource();
    	if (src instanceof JCalendar) display.setText("ciao");
    	else display.setText("buon giorno");		
        }
    }
    P.S:Il mio frame è composto da display nella parte nord e da JCalendar nella parte sud

  2. #2
    Hai associato al Frame il MouseListener mediante addMouseListener(MouseListener l)?

    Nota:
    A mio parere è inutile associare MouseListener ad un Frame che contiene altri componenti.
    Piuttosto dovresti associare quel MouseListener a quei componenti.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    68
    Il MouseListener l'ho associato a calendar (calendar.addMouseListener(this)). Il codice che ho postato è una semplificazione del codice che ho realmente, praticamente this corrisponde ad un oggetto GuiWindowAgenda perchè l'addMouseListener l'ho messo nel costruttore della classe GuiWindowAgenda.
    Comunque, ho implementato questi metodi:
    codice:
    public void mouseClicked(MouseEvent evt) { 		
        Object src = evt.getSource(); 		
         if (src instanceof JCalendar) display.setText("mouse click JCalendar"); 		
         else display.setText("mouse click else"); 		 	
    }
    
    public void mouseEntered(MouseEvent evt) { 		
         Object src = evt.getSource(); 
         if (src instanceof JCalendar) display.setText("mouse entered JCalendar"); 		
         else display.setText("mouse entered else"); 	
    }
    
    public void mouseExited(MouseEvent evt) { 		
         Object src = evt.getSource(); 		
         if (src instanceof JCalendar) display.setText("mouse exited JCalendar"); 		
         else display.setText("mouse exited else"); 	
    }
    
    public void mousePressed(MouseEvent evt) { 		
        Object src = evt.getSource(); 		
        if (src instanceof JCalendar) display.setText("mouse pressed JCalendar"); 		
        else display.setText("mouse pressed else"); 	
    }
    
    public void mouseReleased(MouseEvent evt) { 		
         Object src = evt.getSource(); 		
         if (src instanceof JCalendar) display.setText("mouse released JCalendar"); 		
         else display.setText("mouse released else"); 	
    }
    e l'unico che funziona è mouseExited, ovvero scatta quando passo il mouse sulla finestra.

    EDIT:
    Facendo diverse prove ho notato che i metodi funzionano solo quando clicco, passo sopra ecc nell'area che ho evidenziato con il rosso. A me interesserebbe fare azionare il click del mouse quando clicco su un giorno del calendario.



    EDIT 2: scusate ma non mi carica le immagini nel tag e devo postare direttamente il link: http://imgur.com/GlnVd

  4. #4
    Originariamente inviato da 8paolo9
    A me interesserebbe fare azionare il click del mouse quando clicco su un giorno del calendario.
    Guarda bene le API di JCalendar, ed in particolare quella di JDayChooser.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    68
    Non riesco a collegare JCalendar con JDayChooser. Mi potresti dare un altro indizio?

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    68
    Leggendo qua e la ho capito che quei pulsanti per selezionare la data sono di tipo JDateChooser.
    Ho modificato il metodo nel seguente modo:
    codice:
    public void mouseClicked(MouseEvent evt) { 		
        if (evt.getSource() instanceof JDateChooser) display.setText("mouse click JCalendar"); 		
        else display.setText("mouse click else"); 	
    }
    ..continua a non funzionare..

  7. #7
    Mi sono visto il framework, e ho provato a fare qualche esempio in base alla tua esigenza:

    codice:
    /**
     * @(#)JCalendarExample.java
     *
     *
     * @author Vincenzo
     * @version 1.00 2012/4/30
     */
    
    import com.toedter.calendar.*;
    import javax.swing.*;
    import java.awt.Component;
    import java.awt.event.*;
    import java.util.*;
    
    public class JCalendarExample extends JFrame {
    	
        private final JCalendar calendar;
        
        public JCalendarExample() {
        	super("JCalendar");
        	this.calendar = new JCalendar();
        	
        	JDayChooser dc = this.calendar.getDayChooser();
        	JPanel dcp = dc.getDayPanel();
        	
        	for(Component c : dcp.getComponents()) {
        		if( c instanceof JButton ) {
        			JButton button = (JButton)c;
        			if( !button.getText().equals("") && Character.isDigit(button.getText().charAt(0)) )
        				button.addActionListener( new ActionListener() {
        					@Override
        					public void actionPerformed(ActionEvent e){
        							Calendar c = new GregorianCalendar();
        							c.set(Calendar.DATE, Integer.parseInt(((JButton)e.getSource()).getText()) );
    								c.set(Calendar.MONTH, calendar.getMonthChooser().getMonth() );
    								c.set(Calendar.YEAR, calendar.getYearChooser().getYear() );
        							
        							System.out.println("Data selezionata:" + c.getTime() );
        						}
        					}
        				);
        		}
        	}
        	this.add( this.calendar );
        	
        	this.setDefaultCloseOperation( super.EXIT_ON_CLOSE );
        	this.setResizable(true);
        	this.pack();
        	this.validate();
        	this.setVisible(true);
        }
        
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) throws Exception {
            // TODO code application logic here
            SwingUtilities.invokeAndWait( new Runnable(){
            	@Override
            	public void run() {
            		new JCalendarExample();
            	}
            } );
        }
    }
    In sostanza, associa ad ogni pulsante nel JDayChooser l'ActionListener da me definito che, quindi consente di ottenere la data selezionata alla pressione di un pulsante.

    Invece, se vuoi fare una cosa meno elaborata ma ottenendo più o meno lo stesso risultato, puoi utilizzare il JDateChooser chiedendo esplicitamente all'utente quando ha selezionato la data:
    codice:
    /**
     * @(#)JDateChooserExample.java
     *
     *
     * @author Vincenzo
     * @version 1.00 2012/4/30
     */
    
    import com.toedter.calendar.*;
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    
    public class JDateChooserExample extends JFrame{
    	
        private final JDateChooser dc;
        
        public JDateChooserExample() {
        	super("JDateChooser");
        	this.dc = new JDateChooser();
        	
        	JButton button = new JButton("Show");
        	button.addActionListener(new ActionListener(){
        			@Override
        			public void actionPerformed(ActionEvent e){
        				System.out.println( dc.getDate() );
        			}
        		}
        	);
        	
        	this.add(dc, BorderLayout.NORTH);
        	this.add(button, BorderLayout.SOUTH);
        	
        	this.setDefaultCloseOperation( super.EXIT_ON_CLOSE );
        	this.setResizable(true);
        	this.pack();
        	this.validate();
        	this.setVisible(true);    	
        }
        
        
        
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) throws Exception {
            // TODO code application logic here
            SwingUtilities.invokeAndWait( new Runnable(){
            	@Override
            	public void run() {
            		new JDateChooserExample();
            	}
            } );        
        }
    }

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    68
    Il primo caso è quello che mi s'addice di più. Ho un paio di domande (ti anticipo che ho letto la documentazione ma non ho trovato risposta):
    1-I pulsanti del calendario con i numerini sono dei JButton oppure dei JDayChooser?
    2-mi potresti spiegare questa riga?
    codice:
    if(!button.getText().equals("") && Character.isDigit(button.getText().charAt(0)))

    Grazie

  9. #9
    Originariamente inviato da 8paolo9
    Il primo caso è quello che mi s'addice di più. Ho un paio di domande (ti anticipo che ho letto la documentazione ma non ho trovato risposta):
    1-I pulsanti del calendario con i numerini sono dei JButton oppure dei JDayChooser?
    Sono istanze della classe JButton.

    Originariamente inviato da 8paolo9
    2-mi potresti spiegare questa riga?
    codice:
    if(!button.getText().equals("") && Character.isDigit(button.getText().charAt(0)))

    Grazie
    Verifica se il testo nel pulsante è un numero.

  10. #10
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    68
    codice:
    Character.isDigit(button.getText().charAt(0))
    In questa parte di codice prendiamo il primo carattere del bottone e verifichiamo se è un numero. Praticamente ci assicuriamo di aver premuto un pulsante con un numero.

    Però non mi torna questa parte del codice:
    codice:
    !button.getText().equals("")
    Ho provato a fare così:
    codice:
    button.getText().equals("2")
    e ovviamente printa solo quando andiamo a premere sul 2, però non mi torna il diverso da ""..

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.