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.
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
Post a Comment