java – Nimbus L&F缺少JTabbedPane上的分隔符设置为滚动
我错过了标签之间的蓝色水平分隔线和Nimbus L& F TabbedPane中设置为SCROLL的内容(其他L& Fs(默认&窗口)提供这些).
正如您所看到的,问题仅限于新的JTabbedPane(JTabbedPane.TOP,JTabbedPane.SCROLL_TAB_LAYOUT)(图片顶部),而WRAP的默认设置不显示此行为(图片底部). 应该可以通过覆盖NimbusDefaults.class的部分来改变这样的事情.这是一段摘录: //Initialize TabbedPane d.put("TabbedPane.contentMargins",new InsetsUIResource(0,0)); d.put("TabbedPane.tabAreaStatesMatchSelectedTab",Boolean.TRUE); d.put("TabbedPane.nudgeSelectedLabel",Boolean.FALSE); d.put("TabbedPane.tabRunOverlay",new Integer(2)); d.put("TabbedPane.tabOverlap",new Integer(-1)); d.put("TabbedPane.extendTabsToBase",Boolean.TRUE); d.put("TabbedPane.useBasicArrows",Boolean.TRUE); addColor(d,"TabbedPane.shadow","nimbusDisabledText",0.0f,0); addColor(d,"TabbedPane.darkShadow","text",0); ... more ... 我似乎无法弄清楚Nimbus在哪里以及如何区分WRAP&滚动.有人可以告诉我,我有什么魔法.put()到达那里? 提前致谢! 解决方法
敬启者:
一位同事找到了问题的根源.在: package javax.swing.plaf.synth.SynthTabbedPaneUI; 它说: protected void paint(SynthContext context,Graphics g) { int selectedIndex = tabPane.getSelectedIndex(); int tabPlacement = tabPane.getTabPlacement(); ensureCurrentLayout(); // Paint tab area // If scrollable tabs are enabled,the tab area will be // painted by the scrollable tab panel instead. // if (!scrollableTabLayoutEnabled()) { // WRAP_TAB_LAYOUT [...] // Here is code calculating the content border [...] } // Paint content border paintContentBorder(tabContentContext,g,tabPlacement,selectedIndex); } 如您所见,scrolllableTabLayout从以下代码中排除,其中计算分隔符的大小.当你按照你所看到的括号进行操作时:它稍后会被绘制,但是有错误的参数.如果选项卡设置为内容的TOP或LEFT,则会导致省略分隔符的行为.如果设置为RIGHT或BOTTOM,则实际上会显示分隔符,但是会损坏(边框朝向内容太厚,总体上不够长. 从Synth到Nimbus覆盖所有东西都需要相当多的efford,因为有很多最终版和包受保护的类. 因此,您可能希望采用更简单的方法: uiDefaults.put("TabbedPane:TabbedPaneTabArea.contentMargins",new InsetsUIResource(3,10,10)); 这会将较低的间隙剥离到您的标签,您可能会在内容面板的顶部边缘放置一个“假的”分隔符.但这就是我们处理它的方式. 希望能帮助到你.请享用! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |