java - How to keep the look of disabled JTabbedPane's tabs to look exactly like when they are active? -


i using jtabbedpane , set of tabs disabled. @ same time need keep tabs when active. don't need them grayed in colors. move between tabs using next , previous buttons. purpose of tabs visual indicator.

i tried this code answer. works, how modify correctly disabled tabs when active tabs.

i mean default look of swing active tab components:

by active tab mean enabled no matter whether selected or not.

three swing tabs tab2 selected

i set of tabs disabled. @ same time need keep tabs when active. don't need them grayed in colors.

maybe can use jlayer or jtabbedpane#settabcomponentat(component).

(4) no other alternative known me use visual indicator.

how using jslider.

import java.awt.*; import java.awt.event.*; import java.util.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.plaf.*;  public class tabbedpanetest {   private int prev = 0;   public jcomponent makeui() {     jpanel p = new jpanel(new gridlayout(0, 1, 0, 5));     p.setborder(borderfactory.createemptyborder(5, 5, 5, 5));      jtabbedpane tabbedpane0 = new smalltabbedpane();     jtabbedpane tabbedpane1 = new smalltabbedpane();     jtabbedpane tabbedpane2 = new smalltabbedpane() {       @override public void addtab(string title, component content) {         super.addtab(title, content);         int currentindex = gettabcount() - 1;         settabcomponentat(currentindex, new jlabel(title));         setcomponentat(currentindex, content);       }     };      inittabbedpane(tabbedpane0);     p.add(new jlayer<jcomponent>(tabbedpane0, new disableinputlayerui()));      (jtabbedpane tabs : arrays.aslist(tabbedpane1, tabbedpane2)) {       inittabbedpane(tabs);       tabs.setenabledat(0, false);       tabs.setenabledat(1, false);       tabs.setenabledat(2, false);       tabs.setenabledat(3, false);       p.add(tabs);     }      dictionary<integer, component> labeltable = new hashtable<>();     int c = 0;     (string s : arrays.aslist("tab1", "tab2", "tab2", "tab4")) {       jlabel l = new jlabel(s);       if (c == 0) {         resetforeground(l, color.red, color.white);       }       labeltable.put(c++, l);     }     jslider slider = new jslider(0, 3, 0);     //slider.setenabled(false);     slider.setsnaptoticks(true);     slider.setpaintticks(true);     slider.setlabeltable(labeltable);     slider.setpaintlabels(true);     slider.getmodel().addchangelistener(e -> {       boundedrangemodel m = (boundedrangemodel) e.getsource();       int = m.getvalue();       if (i != prev) {         dictionary dictionary = slider.getlabeltable();         resetforeground(dictionary.get(i), color.red, color.white);         resetforeground(dictionary.get(prev), color.black, null);         slider.repaint();         prev = i;       }     });     p.add(new jlayer<jcomponent>(slider, new disableinputlayerui()));      jbutton button = new jbutton("next");     button.addactionlistener(e -> {       int = tabbedpane1.getselectedindex() + 1;       int next = >= tabbedpane1.gettabcount() ? 0 : i;       tabbedpane0.setselectedindex(next);       tabbedpane1.setselectedindex(next);       tabbedpane2.setselectedindex(next);       slider.setvalue(next);     });      jpanel pp = new jpanel(new borderlayout());     pp.add(p, borderlayout.north);     pp.add(button, borderlayout.south);     return pp;   }   private static void inittabbedpane(jtabbedpane tabs) {     tabs.addtab("tab1", new jlabel());     tabs.addtab("tab2", new jlabel());     tabs.addtab("tab3", new jlabel());     tabs.addtab("tab4", new jlabel());   }   private static void resetforeground(object o, color fc, color bc) {     if (o instanceof jcomponent) {       jcomponent c = (jcomponent) o;       c.setforeground(fc);         if (bc != null) {             c.setopaque(true);             c.setbackground(bc);         } else {             c.setopaque(false);         }     }   }   public static void main(string... args) {     eventqueue.invokelater(() -> {       jframe f = new jframe();       f.setdefaultcloseoperation(windowconstants.exit_on_close);       f.getcontentpane().add(new tabbedpanetest().makeui());       f.setsize(320, 320);       f.setlocationrelativeto(null);       f.setvisible(true);     });   } }  class smalltabbedpane extends jtabbedpane {   @override public dimension getpreferredsize() {     dimension d = super.getpreferredsize();     d.height = 24;     return d;   } }  class disableinputlayerui extends layerui<jcomponent> {   @override public void installui(jcomponent c) {     super.installui(c);     ((jlayer) c).setlayereventmask(       awtevent.mouse_event_mask | awtevent.mouse_motion_event_mask       | awtevent.mouse_wheel_event_mask | awtevent.key_event_mask       | awtevent.focus_event_mask | awtevent.component_event_mask);   }   @override public void uninstallui(jcomponent c) {     ((jlayer) c).setlayereventmask(0);     super.uninstallui(c);   }   @override public void eventdispatched(awtevent e, jlayer<? extends jcomponent> l) {     if (e instanceof inputevent) {       ((inputevent) e).consume();     }   } } 

Comments

Popular posts from this blog

mysql - Dreamhost PyCharm Django Python 3 Launching a Site -

java - Sending SMS with SMSLib and Web Services -

java - How to resolve The method toString() in the type Object is not applicable for the arguments (InputStream) -