java - How to access all components beneath top JFrame -


partly learning purposes, made jframe 4 jpanels, 2 jlabels, , jmenubar. put various components (buttons, textboxes, textarea) 4 jpanels. disabled every 1 of components throughout.

i wrote 2 methods try enable everything. worked partially. here's code:

  public void enableeverything(){     component [] p = this.getcontentpane().getcomponents();     for(component pp : p)       if(pp instanceof jpanel)         enableall((jpanel) pp);   }    public void enableall(jpanel p){     component [] c = p.getcomponents();     for(component cc: c)       cc.setenabled(true);     jtextarea1.setenabled(true);     jscrollpane1.setenabled(true);   } 

the jtextarea (inside jscrollpane) didn't enabled last 2 lines above. why?

i tried:

component [] s = jscrollpane1.getcomponents(); for(component ss: s)   ss.enableinputmethods(true); 

how enable textarea?

and jmenubar didn't enabled either. don't know find it. read it's in jlayeredpane, ... tried didn't work:

for(int = 0; < 2; i++){   system.out.println(i);   this.getlayeredpane().getcomponent(i).setenabled(true); } 

in pane find jmenubar , how enable jmenus? (and jmenuitems.)

of course, worked:

menfileandedit.setenabled(true); mnufile.setenabled(true); mnuedit.setenabled(true); mnifilesave.setenabled(true); mnieditundo.setenabled(true); mnieditredo.setenabled(true); 

keep in mind i'm experimenting, trying learn , how access programmatically drilling down top jframe using getcomponents().

1st edit

here's how @ menu bar!

component[] m = this.getjmenubar().getcomponents();     for(component mm: m)       mm.setenabled(true); 

2nd edit

see below recursive partial solution.

this "recursive response" @maaartinus (though second read note stack). it's not answer problem, it's progress.

  public void enableeverything(container c){     component [] p = c.getcomponents();     system.out.println("component count " + c.getcomponentcount() + " " +                                                c.tostring().substring(0,40)  );     for(component pp : p){         pp.setenabled(true);         if(pp instanceof container){           system.out.println("recursive call " + pp.tostring().substring(0,40));           enableeverything((container) pp);         }         else system.out.println("no recursive call");     } 

i had call twice enabled:

  gameboard.enableeverything(gameboard.getcontentpane());   gameboard.enableeverything(gameboard.getjmenubar()); 

it did away 1 method since it's recursive, , produced same results in did not enable jmenuitems or jtextarea.

so i'm still looking how that.

it produced interesting output in every component seems instance of container, doesn't seem right:

 gameboard.enableeverything(gameboard.getcontentpane()) component count 6 javax.swing.jpanel[null.contentpane,0,23 recursive call    javax.swing.jpanel[pnlgamegrid,12,139,59 component count 1 javax.swing.jpanel[pnlgamegrid,12,139,59 recursive call    javax.swing.jtextfield[jtextfield1,233,1 component count 0 javax.swing.jtextfield[jtextfield1,233,1 recursive call    javax.swing.jpanel[pnlavailableletters,1 component count 1 javax.swing.jpanel[pnlavailableletters,1 recursive call    javax.swing.jtogglebutton[jtogglebutton1 component count 0 javax.swing.jtogglebutton[jtogglebutton1 recursive call    javax.swing.jlabel[lblavailableletters,1 component count 0 javax.swing.jlabel[lblavailableletters,1 recursive call    javax.swing.jpanel[pnlscore,476,25,107x9 component count 2 javax.swing.jpanel[pnlscore,476,25,107x9 recursive call    javax.swing.jtextfield[txtscore,21,14,66 component count 0 javax.swing.jtextfield[txtscore,21,14,66 recursive call    javax.swing.jbutton[btnscore,21,61,66x24 component count 0 javax.swing.jbutton[btnscore,21,61,66x24 recursive call    javax.swing.jpanel[pnlplays,624,51,271x5 component count 3 javax.swing.jpanel[pnlplays,624,51,271x5 recursive call    javax.swing.jscrollpane[jscrollpane1,13, component count 3 javax.swing.jscrollpane[jscrollpane1,13, recursive call    javax.swing.jviewport[,1,1,220x80,layout component count 1 javax.swing.jviewport[,1,1,220x80,layout recursive call    javax.swing.jtextarea[jtextarea1,0,0,220 component count 0 javax.swing.jtextarea[jtextarea1,0,0,220 recursive call    javax.swing.jscrollpane$scrollbar[,0,0,0 component count 2 javax.swing.jscrollpane$scrollbar[,0,0,0 recursive call    javax.swing.plaf.metal.metalscrollbutton component count 0 javax.swing.plaf.metal.metalscrollbutton recursive call    javax.swing.plaf.metal.metalscrollbutton component count 0 javax.swing.plaf.metal.metalscrollbutton recursive call    javax.swing.jscrollpane$scrollbar[,0,0,0 component count 2 javax.swing.jscrollpane$scrollbar[,0,0,0 recursive call    javax.swing.plaf.metal.metalscrollbutton component count 0 javax.swing.plaf.metal.metalscrollbutton recursive call    javax.swing.plaf.metal.metalscrollbutton component count 0 javax.swing.plaf.metal.metalscrollbutton recursive call    javax.swing.jbutton[jbutton1,61,262,81x2 component count 0 javax.swing.jbutton[jbutton1,61,262,81x2 recursive call    javax.swing.jcheckbox[jcheckbox1,49,207, component count 0 javax.swing.jcheckbox[jcheckbox1,49,207, recursive call    javax.swing.jlabel[lblplays,624,29,100x1 component count 0 javax.swing.jlabel[lblplays,624,29,100x1   gameboard.enableeverything(gameboard.getjmenubar()) component count 2 javax.swing.jmenubar[menfileandedit,0,0, recursive call    javax.swing.jmenu[mnufile,0,0,31x21,alig component count 0 javax.swing.jmenu[mnufile,0,0,31x21,alig recursive call    javax.swing.jmenu[mnuedit,31,0,33x21,ali component count 0 javax.swing.jmenu[mnuedit,31,0,33x21,ali 

i hoping recursion @ jmenuitems, no such luck. any thoughts on how so?

i guess need recurse whole tree, like

  • start root
  • iterate components
  • enable each of them
  • test if it's instance of container
  • if so, recursive call

for scrollpane you'll need additional instanceof test , getviewport or this.


Comments

Popular posts from this blog

jQuery Mobile app not scrolling in Firefox -

c++ - How to add Crypto++ library to Qt project -

php array slice every 2th rule -