swing - Java Scrolling with the More Logical ScrollBar -


i have array of jtextpanes inside jscrollpanes. components mentioned inside jpanel inside jscrollpane.

user interface picture

at start of program, none of jtextpanes have text, scrollbars them not visible. scrollbars jpanel visible, because have lot of components in it.

my issue if cursor on 1 of jtextpanes , try scroll, nothing happens because computer thinks want scroll jtextpane's scrollbars. happen computer realize i'm trying scroll jpanel's scrollbar. there way accomplish this?

thanks!

edit:

you produce similar ui 1 above code ( constructor of class extending jframe - apologies ignoring lot of coding habits ):

public jframetest() {     jpanel panel = new jpanel( new gridlayout( 10 , 10 , 10 , 10 ) );     ( int = 0 ; < 10 ; ++ ) {         ( int j = 0 ; j < 10 ; j ++ ) {             jscrollpane panetoadd = new jscrollpane( new jtextpane() ) {                 /**                  *                   */                 private static final long serialversionuid = 1l;                  @override                 public dimension getpreferredsize() {                     return new dimension( 100 , 100 );                 }             };             panel.add( panetoadd );         }     }     add( new jscrollpane( panel ) );      setsize( 700 , 500 );     setvisible( true );     setdefaultcloseoperation( jframe.exit_on_close ); } 

the following code taken quick hack mouse wheel controller.

basically intercepts mousewheelevent scroll pane containing text area. if scrollbar visible redispatches event same scroll pane otherwise finds parent scrollpane , dispatches event scrollpane.

import java.awt.*; import java.awt.event.*; import javax.swing.*;  public class mousewheeltoparent implements mousewheellistener {     private jscrollpane scrollpane;     private mousewheellistener[] reallisteners;      public mousewheeltoparent(jscrollpane scrollpane)     {         this.scrollpane = scrollpane;         install();     }      public void install()     {         if (reallisteners != null) return;          //  keep track of original listeners can use them         //  redispatch altered mousewheelevent          reallisteners = scrollpane.getmousewheellisteners();          (mousewheellistener mwl : reallisteners)         {             scrollpane.removemousewheellistener(mwl);         }          //  intercept events can redispatched          scrollpane.addmousewheellistener(this);     }      /**      *  remove class default listener , reinstall original      *  listeners.      */     public void uninstall()     {         if (reallisteners == null) return;          //  remove class default listener          scrollpane.removemousewheellistener( );          //  install default listeners          (mousewheellistener mwl : reallisteners)         {             scrollpane.addmousewheellistener( mwl );         }          reallisteners = null;     }  //  implement mousewheellistener interface      /**      *  redispatch mousewheelevent real mousewheellisteners      */     public void mousewheelmoved(mousewheelevent e)     {         jscrollpane scrollpane = (jscrollpane)e.getcomponent();          if (scrollpane.getverticalscrollbar().isvisible())         {             //  redispatch event original mousewheellistener              (mousewheellistener mwl : reallisteners)             {                 mwl.mousewheelmoved( e );             }         }         else         {             dispatchtoparent(e, scrollpane);             return;         }     }      private void dispatchtoparent(mousewheelevent e, jscrollpane scrollpane)     {         component ancestor = swingutilities.getancestorofclass(jscrollpane.class, scrollpane);          mousewheelevent mwe = new mousewheelevent(             ancestor,             e.getid(),             e.getwhen(),             e.getmodifiers(),             e.getx(),             e.gety(),             e.getxonscreen(),             e.getyonscreen(),             e.getclickcount(),             e.ispopuptrigger(),             e.getscrolltype(),             e.getscrollamount(),             e.getwheelrotation());          ancestor.dispatchevent(mwe);     }      private static void createandshowui()     {         jpanel panel = new jpanel( new gridbaglayout() );         gridbagconstraints gbc = new gridbagconstraints();         gbc.insets = new insets(10, 10, 10, 10);          (int y = 0; y < 10; y++)         {             (int x = 0; x < 5; x++)             {                 gbc.gridx = x;                 gbc.gridy = y;                 jtextarea textarea = new jtextarea(5, 20);                 jscrollpane scrollpane = new jscrollpane( textarea );                 scrollpane.setminimumsize( scrollpane.getpreferredsize() );                 new mousewheeltoparent(scrollpane);                 panel.add(scrollpane, gbc);             }         }         jframe frame = new jframe("textareasscce");         frame.setdefaultcloseoperation(jframe.exit_on_close);         frame.add( new jscrollpane( panel ) );         frame.setsize(400, 400);         frame.setlocationbyplatform( true );         frame.setvisible( true );     }      public static void main(string[] args)     {         eventqueue.invokelater(new runnable()         {             public void run()             {                 createandshowui();             }         });     } } 

Comments

Popular posts from this blog

c# - Send Image in Json : 400 Bad request -

jquery - Fancybox - apply a function to several elements -

An easy way to program an Android keyboard layout app -