Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it L'avatar di oronze
    Registrato dal
    Jun 2001
    Messaggi
    3,543

    MouseListener che si sovrappongono

    Ciao ragazzi, mi scuso per il titolo ma non ne ho trovato nessuno più opportuno per descrivere il mio problema...allora, ho tre classi, NoteButton, EventButton e OptionButton, tutte e tre sono delle estensioni di JButton alle quali ho aggiunto questo codice
    codice:
    this.addMouseListener(new MouseListener(){
    	public void mouseClicked(MouseEvent arg0) {
    	}
    		public void mouseEntered(MouseEvent arg0) {
    		setBackground(ButtonPanelOptions.mouseInColor);
    		setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
    		MainWindow.timerFlag=true;
    	}
    	public void mouseExited(MouseEvent arg0) {
    		setBackground(ButtonPanelOptions.mouseOutColor);
    		MainWindow.timerFlag=false;
    	}
    	public void mousePressed(MouseEvent arg0) {}
    	public void mouseReleased(MouseEvent arg0) {}
    		});
    e che aggiungo in questo modo a un JPanel
    codice:
    EventButton add = new EventButton();
    add.setLocation(10, (Options.altezzaBarra/2) - (add.getHeight()/2));
    
    OptionButton options = new OptionButton();
    options.setLocation(150, (Options.altezzaBarra/2) - (options.getHeight()/2));
    		
    NoteButton note = new NoteButton();
    note.setLocation(350, (Options.altezzaBarra/2) - (note.getHeight()/2));
    
    this.add(add);
    this.add(options);
    this.add(note);
    Il problema principale è che quando passo sopra con il mouse su un button, sul primo mouseEntered mi fa visualizzare come background lo sfondo del primo pulsante dove ero sopra....con una immagine forse diventa tutto più chiaro...
    Allora, io passo con il mouse sopra il pulsante EventButton e poi, quando vado con il mouse sopra OptionButton ottengo il problema presente nell'allegato. Se ripasso sopra OptionButton il problema sparisce. Come risolvo questa situazione?

    Se sono stato poco chiaro fatemi sapere che provo a rispiegare tutto!
    Immagini allegate Immagini allegate

    No ai layout tabellari!

    Insulto libero: http://forum.html.it/forum/showthread.php?s=&postid=12524872#post12524872

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    giuro ho riletto 3 volte e non ho capito quale è il problema, puoi spiegare che succede?

  3. #3
    Utente di HTML.it L'avatar di oronze
    Registrato dal
    Jun 2001
    Messaggi
    3,543
    Allora, ci riprovo...
    dati tre pulsanti A, B, C, quando passo con il mouse su B, dopo essere passato su A, come sfondo del pulsante B appare A...con riferimento all'immagine allegata, dopo che passo sul pulsante "Aggiungi evento", quando passo poi su "Opzioni", come si vede nell'immagine, come sfondo del pulsante "Opzioni" ho il pulsante "Aggiungi evento" e, graficamente è una cosa molto brutta da avere...
    in ogni caso posto un link al video che ho fatto per spiegare meglio il problema

    http://www.youtube.com/watch?v=twpPwswgUk0

    con il fullscreen si vede bene...intanto pubblico anche la classe intera di uno dei JButton gli altri sono tutti uguali a differenza dell'icona e del testo
    codice:
    public class NoteButton extends JButton{
    	
    	private static final long serialVersionUID = 1L;
    	public NoteButton(){
    		this.setOpaque(false);
    		this.setBorderPainted(false);
    		this.setBackground(ButtonPanelOptions.mouseOutColor);
    
    		this.setSize(108, ButtonPanelOptions.buttonH);
    
    		
    		ImageIcon img = new ImageIcon("note.png");
    		
    		int imgW = img.getIconWidth();
    		int imgH = img.getIconHeight();
    		
    		JLabel i = new JLabel(img);
    		i.setSize(imgW, imgH);
    		i.setLocation(10, this.getHeight()/2-(imgH/2));
    		this.add(i);
    		
    		JLabel txt = new JLabel("Note");
    		txt.setSize(120, 40);
    		txt.setLocation(imgW+15, 0);
    		this.add(txt);
    		
    		this.addMouseListener(new MouseListener(){
    			public void mouseClicked(MouseEvent arg0) {
    			}
    
    			public void mouseEntered(MouseEvent arg0) {
    				setBackground(ButtonPanelOptions.mouseInColor);
    				setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
    				MainWindow.timerFlag=true;
    			}
    
    			public void mouseExited(MouseEvent arg0) {
    				setBackground(ButtonPanelOptions.mouseOutColor);
    				MainWindow.timerFlag=false;
    			}
    
    			public void mousePressed(MouseEvent arg0) {
    			}
    
    			public void mouseReleased(MouseEvent arg0) {
    			}
    			
    		});
    	}
    
    }

    No ai layout tabellari!

    Insulto libero: http://forum.html.it/forum/showthread.php?s=&postid=12524872#post12524872

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    allora ora non ho tempo di controllare il tuo codice, stasera gli do un'occhiata e ti faccio sapere
    ad occhio e croce credo di aver capito il problema, ma voglio controllarlo prima di dirti qualcosa

    ciauuu

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Allora io ho dato un'occhiata al tuo codice e ti faccio degli appunti:

    1. JButton ha già la possibilità di inserire un testo e un'icona (ci sono diversi costruttori se vedi le api puoi infatti inserire sia un'icona che un testo. Ovviamente per le dimensioni devi giocarci un po', ma di solito io preferisco non fissarla a priori, ma giocare un po' coi layout manager in modo da poter gestire anche i ridimensionamenti. Ma se cmq vuoi utilizzare il tuo componente nessuno te lo vieta.
    2. puoi usare invece di MouseListener MouseAdapter: è una classe astratta che ti consente l'implementazione solo dei metodi che ti servono (in questo caso mouseentered ed exited) senza dover per forza dare l'implementazione per gli altri metodi, anche se tu la lasci vuota).

    questo è il codice che ho fatto io (testato) vedi un po se funziona come vuoi tu. Ho fatto qualche modifica per avere un qualcosa da vedere, ma sono semplici le modifiche fatte

    codice:
    public class NoteButton extends JButton {
    
        private static final long serialVersionUID = 1L;
    
        Color color ;
        public NoteButton(final Color color) {
            this.color = color;
            setBorderPainted(false);
            setBackground(this.color);
            setSize(108, 108);
            ImageIcon img = new ImageIcon("note.png");
            int imgW = img.getIconWidth();
            int imgH = img.getIconHeight();
    
            JLabel i = new JLabel(img);
            i.setSize(imgW, imgH);
            i.setLocation(10, this.getHeight() / 2 - (imgH / 2));
            add(i);
    
            JLabel txt = new JLabel("Note");
            txt.setSize(120, 40);
            txt.setLocation(imgW + 15, 0);
            add(txt);
    
            this.addMouseListener(new MouseAdapter() {
    
                @Override
                public void mouseEntered(MouseEvent arg0) {
                    System.out.println("dentro mouseentered");
                    setBackground(Color.GREEN);
                    setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
                  //  MainWindow.timerFlag = true;
                }
    
                @Override
                public void mouseExited(MouseEvent arg0) {
                    System.out.println("dentro mouseexited");
                    setBackground(color);
                 //   MainWindow.timerFlag = false;
                }
            });
        }
    }

  6. #6
    Utente di HTML.it L'avatar di oronze
    Registrato dal
    Jun 2001
    Messaggi
    3,543
    ti ringrazio per la risposta ma i metodi dell'interfaccia devo implementarli in ogni caso...li ho lasciati vuoti perchè lo farò in una seconda fase...ma sò già che mi servono. Detto questo, per le dimensioni assolute non ho problemi dato che la mia applicazione non deve essere ridimensionata quindi trovavo una perdita di tempo giostrare con i vari layout dato che non c'è bisogno di avere dimensioni e posizionamenti relativi.

    Domani provo il tuo codice dato che per il momento ho forse trovato una soluzione migliore per via teorica anche se domani la implementerò e ti farò sapere. Per quanto riguarda il JButton, ho scoperto solo ora il macello che è stato fatto a quella classe...mi è stata data così^__^

    Domani ti faccio sapere cosa risolvo....

    No ai layout tabellari!

    Insulto libero: http://forum.html.it/forum/showthread.php?s=&postid=12524872#post12524872

  7. #7
    Utente di HTML.it L'avatar di oronze
    Registrato dal
    Jun 2001
    Messaggi
    3,543
    Ho trovato la soluzione ma non ho capito se è un bug di java o meno...il problema risiede nel fatto che ho impostato al JPanel che contiene i tre pulsanti
    codice:
    this.setBackground(new Color(255, 255, 255, 100));
    se invece metto
    codice:
    this.setBackground(new Color(255, 255, 255));
    quindi, senza alfa, il problema non si pone. La cosa la trovo molto strana ma non è un grande problema visto che cambiare di poco la mia interfaccia non mi crea grossi problemi

    anzi...ho appena capito che in realtà il problema risiede nel setOpaque(false) dei Button....

    No ai layout tabellari!

    Insulto libero: http://forum.html.it/forum/showthread.php?s=&postid=12524872#post12524872

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    ti serve il valore di alfa??? leggevo le api ed è un float, tu passi una costante intera, forse questo dà fastidio.
    Prova a mettere 100f.

    Riguardo la dimensione è una questione di praticitità, spesso si parte con dimensioni fisse, ma quando sviluppi applicazioni grafiche devi ricordare che non tutti hanno il tuo monitor e la tua risoluzione, quindi dimensioni relative aiutano ad adattare l'applicazione alla realtà. Proprio per questo motivo di default imposto comportamenti di resize (e anche perché mi è successo di dover rifare tutto a lavoro finito).

  9. #9
    Utente di HTML.it L'avatar di oronze
    Registrato dal
    Jun 2001
    Messaggi
    3,543
    Originariamente inviato da valia
    ti serve il valore di alfa??? leggevo le api ed è un float, tu passi una costante intera, forse questo dà fastidio.
    Prova a mettere 100f.

    Riguardo la dimensione è una questione di praticitità, spesso si parte con dimensioni fisse, ma quando sviluppi applicazioni grafiche devi ricordare che non tutti hanno il tuo monitor e la tua risoluzione, quindi dimensioni relative aiutano ad adattare l'applicazione alla realtà. Proprio per questo motivo di default imposto comportamenti di resize (e anche perché mi è successo di dover rifare tutto a lavoro finito).
    nonè un problema di int o float, la sitauzione non cambia...ho risolto eliminando this.setOpaque(false); dai pulsanti e ho non ho più problemi...ho solo cambiato un pochino l'interfaccia

    Per quanto riguarda le dimensioni, la penso come te ma questa applicazione deve avere necessariamente queste misure a prescindere dal monitor. Mi spiego meglio...l'applicazione occupa il 70% in larghezza dello schermo ed ha altezza costante. Che senso avrebbe usare i vari layout manager e non posizionamenti assoluti dato che l'applicazione non può essere nè spostata e nè ridimensionata e che la dimensione della finestra la conosco a priori e posiziono tutti gli elementi in base ad essa?

    No ai layout tabellari!

    Insulto libero: http://forum.html.it/forum/showthread.php?s=&postid=12524872#post12524872

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Ti ripeto è un mio modo di operare, mi sono trovata a rifare da capo dei progetti perché come te fissavo dei requisiti minimi sullo schermo che alla fine l'applicazione purtroppo non aveva (e non puoi dire al cliente l'applicazione va, colpa tua che non hai lo schermo adatto comprati un altro schermo). Banalmente avevo problemi perché io sviluppavo su un monitor a risoluzione x, chi testava aveva un monitor con risoluzione y, più piccola e già il progetto è stato rigettato (tornato alla base) perché non è stato possibile testarlo a pieno.
    Mi dirai è una vera noia fare tutto, poi ti viene automatico, dato che dopo risistemare tutto è un bel casotto.
    E' un consiglio che viene fuori dalla mia esperienza, se sei sicuro che mai nessuno ti chiederà di occuparti del resize vai tranquillo con le dimensioni assolute, ma ricordati di mettere a false il resize nel frame.

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.