首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JTabbedPane间距

JTabbedPane间距
EN

Stack Overflow用户
提问于 2012-04-19 05:06:49
回答 2查看 2.2K关注 0票数 0

原始顶部选项卡方向设置:

http://dl.dropbox.com/u/3238736/screenshots/Screenshot-PasswordStore-1.png

有问题的右选项卡定向设置:

从上面的GUI中,我的JTabbedPane (右边的蓝色选项卡)重叠了“退出”按钮(该按钮使用GlassPane呈现)。

注意:退出按钮使用GlassPane呈现在右上角。

我想要一些关于移动蓝色选项卡的技术建议,为“退出”按钮提供一些间隔?

用于创建GlassPane以插入退出按钮的代码如下所示:

代码语言:javascript
复制
public void addUniversalQuitBtn() {
    // Thanks to http://www.java-forums.org/awt-swing/12267-how-add-jbutton-tabbed-pane-headder.html forum post regarding adding a button on glasspane.
    Rectangle tabBounds = mainTabPane.getBoundsAt(0);
    Container glassPane = (Container) this.getRootPane().getGlassPane();
    glassPane.setVisible(true);
    glassPane.setLayout(new GridBagLayout());
    GridBagConstraints gbc = new GridBagConstraints();
    gbc.weightx = 1.0;
    gbc.weighty = 1.0;
    gbc.fill = GridBagConstraints.NONE;
    gbc.insets = new Insets(tabBounds.y, 0, 0, 10);
    gbc.anchor = GridBagConstraints.NORTHEAST;
    quitBtn.setPreferredSize(new Dimension(quitBtn.getPreferredSize().width, (int) tabBounds.getHeight() - 2));
    glassPane.add(quitBtn, gbc);

}

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2012-04-19 12:16:32

好吧,我会让你把退出按钮从玻璃石移到合适的容器上,但是用标准摇摆JTabbedPane你不能这样说.

以下是一些解决方案:

代码语言:javascript
复制
public static void main ( String[] args )
{
    JFrame frame = new JFrame ();

    Insets current = UIManager.getInsets ( "TabbedPane.tabAreaInsets" );
    UIManager.put ( "TabbedPane.tabAreaInsets",
            new Insets ( current.top, 40, current.bottom, current.right ) );

    JTabbedPane tabbedPane = new JTabbedPane ();
    tabbedPane.setTabPlacement ( JTabbedPane.RIGHT );
    tabbedPane.addTab ( "Tab 1", new JLabel () );
    tabbedPane.addTab ( "Tab 2", new JLabel () );
    frame.add ( tabbedPane );

    UIManager.put ( "TabbedPane.tabAreaInsets", current );

    JTabbedPane tabbedPane2 = new JTabbedPane ();
    tabbedPane2.setTabPlacement ( JTabbedPane.RIGHT );
    tabbedPane2.addTab ( "Tab 3", new JLabel () );
    tabbedPane2.addTab ( "Tab 4", new JLabel () );
    frame.add ( tabbedPane2, BorderLayout.SOUTH );

    frame.setSize ( 400, 400 );
    frame.setLocationRelativeTo ( null );
    frame.setVisible ( true );
}

第一个选项卡窗格(顶部)在顶部和标签之间有30 and的间隙。第二个选项卡窗格设置了默认间隙。

通过更改"TabbedPane.tabAreaInsets“键下的嵌入,您可以操作选项卡、run和选项卡窗格边之间的间隔。请注意,当选项卡位置与顶部不同时,这些嵌体将被旋转。所以,如果你想用右标签修改顶部的间距,你应该修改左边的,而不是顶部的,就像我在我的例子中所做的那样。

不要忘记将旧的嵌入值放回原来的值,否则更改将影响更改后创建的所有选项卡窗格。

此外,我不能保证这将适用于所有本机UI,但我认为应该支持这些基本特性。至少在Windows、Mac和Metal中都支持它。

还有一件事--您将无法在运行时更改已经创建的选项卡窗格的选项卡区域内嵌,因为它在创建时被保存到特定的系统UI中,并且不可能更新该值(至少不使用反射“功能”和暴力访问私有字段)。因此,如果您只希望在一种选项卡放置中存在这样的空白,则必须重新创建选项卡窗格。

票数 1
EN

Stack Overflow用户

发布于 2012-04-19 05:30:47

好的。我觉得有点奇怪..。但是您可以有两个按钮:一个在GlassPane中(如果TabbedPane是面向顶部的,则是可见的)和一个在顶部的条形中(如果TabbedPane是向右的,则可以看到)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10221971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档