加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Nimbus L&F缺少JTabbedPane上的分隔符设置为滚动

发布时间:2020-12-15 02:29:18 所属栏目:Java 来源:网络整理
导读:我错过了标签之间的蓝色水平分隔线和Nimbus L F TabbedPane中设置为SCROLL的内容(其他L Fs(默认窗口)提供这些). 正如您所看到的,问题仅限于新的JTabbedPane(JTabbedPane.TOP,JTabbedPane.SCROLL_TAB_LAYOUT)(图片顶部),而WRAP的默认设置不显示此行为(图片底
我错过了标签之间的蓝色水平分隔线和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));

这会将较低的间隙剥离到您的标签,您可能会在内容面板的顶部边缘放置一个“假的”分隔符.但这就是我们处理它的方式.

希望能帮助到你.请享用!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读