gpt4 book ai didi

java - Nimbus L&F 在 JTabbedPane 中缺少分隔线设置为滚动

转载 作者:搜寻专家 更新时间:2023-11-01 03:43:45 26 4
gpt4 key购买 nike

我缺少选项卡之间的蓝色水平分隔线和 Nimbus L&F TabbedPane 中设置为 SCROLL 的内容(其他 L&F(默认和窗口)提供这些)。

enter image description here

如您所见,问题仅限于 new JTabbedPane(JTabbedPane.TOP, JTabbedPane.SCROLL_TAB_LAYOUT)(图片顶部),而默认的 WRAP 不显示此行为(底部图片)。

应该可以通过覆盖 NimbusDefaults.class 的部分内容来更改类似的内容。以下是摘录:

//Initialize TabbedPane
d.put("TabbedPane.contentMargins", new InsetsUIResource(0, 0, 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.0f, 0.0f, 0);
addColor(d, "TabbedPane.darkShadow", "text", 0.0f, 0.0f, 0.0f, 0);
... more ...

我似乎无法弄清楚 Nimbus 在何处以及如何区分 WRAP 和 SCROLL。有人可以告诉我我需要什么魔法才能.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);
}

如您所见,scrollableTabLayout 被排除在以下计算分隔线大小的代码之外。当您按照括号操作时,您会看到:它后来仍然被绘制,但参数错误。如果选项卡设置在内容的顶部或左侧,这将导致分隔符被省略的行为。如果设置为 RIGHT 或 BOTTOM,分隔线实际上会显示,但已损坏(边框朝向内容太粗,整体不够长。

覆盖从 Synth 到 Nimbus 的所有内容需要相当多的努力,因为有很多最终类和包保护类。

因此您可能希望采用更简单的方法:

uiDefaults.put("TabbedPane:TabbedPaneTabArea.contentMargins", new InsetsUIResource(3, 10, 0, 10));    

这将去除标签的下部间隙,您可以在内容面板的顶部边缘放置一个“假”分隔线。不过,这就是我们处理它的方式。

希望对您有所帮助。享受吧!

关于java - Nimbus L&F 在 JTabbedPane 中缺少分隔线设置为滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8166875/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com