我要求我必须显示tabbedpane,但第一个标签必须是静态的。因此我尝试使用jidetabbedpane,因为它关心效果,所有选项卡都列在一个框中,它是可导航的,它可以显示所需的关闭操作等等。但我唯一缺少的是选项:将第一个组件设置为静态或固定。
有什么想法克服这个问题吗?
提前致谢,
Nils Drews
答案 0 :(得分:1)
虽然用户忙于创建其他标签,但听起来要求总是可以快速访问某些母版页。我有一个建议:
这涉及嵌套的JTabbedPanes。如您所知,您可以将标签放在组件的所有4个面上。所以我要做的是创建一个只有1或2个标签的“主要”JTP,第一个当然是你的“主要”标签。然后,该组件中的第二页可以为空或在用户创建其第一个新的“辅助”页面时显示。第二页也应该是一个JTP,可能是标签放在不同的方向;所有新创建的辅助页面都将包含在这个“内部”JTP中。用户可以在辅助页面中翻转,关闭它们等等,但主页面的选项卡将始终在内部JTP的边框外可见。
然后你可以摆弄细节,例如使主JTP的标签不可关闭。由于该窗格只有2页,因此使它们不可移动应该不那么重要了。
或者,您可以将主要和辅助内容放在CardLayout
的单独页面上,并提供一个按钮(或两个)以快速前往(和返回)。根据您的应用程序的布局方式,这可能需要更少的空间。您可以将Action
连接到此按钮,由加速键触发...非常快速,非常方便。这可能会安抚你的老板/客户。
答案 1 :(得分:0)
是。抛弃需要带有固定的第一个标签的标签式窗格的设计:这只是滥用组件而不是意图做的事情。
您可以通过附加更改侦听器并让其否决或撤消更改来阻止制表符翻转;但是我没有详细说明,因为基本前提是错误的。
答案 2 :(得分:0)
DockingManager
有一个名为setTabbedPaneCustomizer
的方法可帮助您自定义选项卡式窗格。
dockingManager.setTabbedPaneCustomizer(new DefaultDockingManager.TabbedPaneCustomizer()
{
@Override
public void customize(JideTabbedPane aTabbedPane)
{
// figure out if the aTabbedPane is the first pane
// getTabCount() == 1 might be a solution?
if( isTheFirstPane(aTabbedPane) )
{
aTabbedPane.setShowCloseButtonOnSelectedTab(false);
}
}
});
上面的代码块需要您注意找出一个正确的方法来确定打开的第一个窗格是否是第一个窗格。希望它有所帮助。