java - How do you add a mouseListener to a jscrollbar? -


i have mouseentered , mouseexited events cause jpanel content change changes size of jpanel. upon mouseentered, content grows , scrollable. upon mouseexited, content shrinks , not scrollable.

the problem hovering mouse on scrollbar triggers mouseexited event jpanel, when user wants drag scrollbar's knob, disappears when go click on it.

if add mouselistener scrollbar itself, imagine keep content shrinking. i've never added mouselistener scrollbar. how can trigger event on mouseentered/exited on scrollbar?

yes, can attach mouselistener scrollbar. it's necessary when content changes on mouseentered/mouseexited wrt jpanel because hovering on jpanel's scrollbar triggers mouseexited. must implement 2 aspects in order keep content if hovered on jpanel: mouseentered/mouseexited , mouseclicked/mousereleased. reason because mouse can hover off scrollbar when scrollbar's knob being dragged, , don't want content change mid-scroll.

all need is, add listener directly scrollbar:

myscrollbar.addmouselistener(new mouseadapter() {          @override         public void mouseentered(mouseevent e) {             if(overscrollofftimer != null) {                 overscrollofftimer.stop();                 overscrollofftimer = null;             }             mymodel.setoverscrollbar(true);         }          @override         public void mouseexited(mouseevent e) {             if(overscrollofftimer == null) {                 overscrollofftimer = new timer(250,                         overscrollofflistener);                 overscrollofftimer.start();             }         }          @override         public void mousepressed(mouseevent e) {             if(activescrollofftimer != null) {                 activescrollofftimer.stop();                 activescrollofftimer = null;             }             mymodel.setbeingscrolled(true);         }          @override         public void mousereleased(mouseevent e) {             if(activescrollofftimer == null) {                 activescrollofftimer =                     new timer(250,                               activescrollofflistener);                 activescrollofftimer.start();             }         }     }); 

in mouselistener, added 2 timers initiated change of jpanel content (after 250ms) (plus third timer jpanel hover). without timers, content can visually hiccup hover panel scrollbar or back. 1 timer started on mouseexited scrollbar. other started when mousereleased scrollbar knob. kept track of whether either mouse on scrollbar, moving scrollbar, , whether mouse on jpanel. if of things true, displayed large content. otherwise, if false, draw small content.

here example of timers:

private javax.swing.timer overscrollofftimer; actionlistener overscrollofflistener = new actionlistener() {     @override     public void actionperformed(actionevent evt) {         if(evt.getsource() == overscrollofftimer) {             /* stop timer */             overscrollofftimer.stop();             overscrollofftimer = null;              mymodel.setoverscrollbar(false);             mymodel.notifyobservers();             revalidate();             repaint();         }     } };  private javax.swing.timer activescrollofftimer; actionlistener activescrollofflistener = new actionlistener() {     @override     public void actionperformed(actionevent evt) {         if (evt.getsource() == activescrollofftimer) {             /* stop timer */             activescrollofftimer.stop();             activescrollofftimer = null;              mymodel.setbeingscrolled(false);             mymodel.notifyobservers();             revalidate();             repaint();         }     } }; 

i have not included timer or mouse listener jpanel, it's similar endeavor without clicked/released methods.

note, tracked status of hover , scrolling in model because other jpanels display different content based on hover interaction , have access model.

btw, used terms "offtimer", "offlistener", etc. because i'm showing real content on hover on set of panels. hovering off of these panels causes content disappear. reason want content disappear because content changes hover on , don't want user confused static unmoving content , lead them make incorrect visual conclusions (e.g. associate visually aligned data in 2 panels alignment changes based on hover position).


Comments

Popular posts from this blog

PHP DOM loadHTML() method unusual warning -

python - How to create jsonb index using GIN on SQLAlchemy? -

c# - TransactionScope not rolling back although no complete() is called -