原始顶部标签方向设置:
http://dl.dropbox.com/u/3238736/screenshots/Screenshot-PasswordStore-1.png
有问题的右侧标签方向设置:
从上面的GUI中,我的JTabbedPane(右边的蓝色标签)与“退出”按钮重叠(使用GlassPane渲染)。
注意:使用GlassPane将退出按钮渲染到右上角。
我想要一些技术建议移动蓝色标签以为“退出”按钮提供一些间距?
创建GlassPane以插入Quit按钮的代码,如下所示:
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);
}
感谢。
答案 0 :(得分:1)
好吧,我建议你把戒烟按钮从玻璃板移到一个合适的容器上但是用标准的Swing JTabbedPane你不能这样说......
所以这是某种解决方案:
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 );
}
第一个标签式窗格(顶部一个)在顶部和标签之间有30px的间隙。第二个选项卡式窗格具有默认间隙设置。
通过更改“TabbedPane.tabAreaInsets”键下的insets,您可以操纵选项卡运行和选项卡式窗格两侧之间的间距。请注意,当标签位置与TOP不同时,会旋转这些插入。因此,如果你想用RIGHT标签位置修改顶部间距,你应该修改左边的一个而不是顶部的一个,就像我在我的例子中所做的那样。
并且不要忘记将旧的Insets值返回,否则该更改将影响更改后创建的所有选项卡式窗格。
此外,我无法保证这适用于所有本机用户界面,但我认为应该支持这些基本功能。至少它在Windows,Mac OS和Metal LaF中受支持。
还有一件事 - 您无法在运行时为已创建的选项卡式窗格更改选项卡区域Insets,因为它在创建时保存到特定的系统UI中,并且无法更新该值(至少没有使用反射“功能”和暴力访问私人领域)。因此,如果只想在一种标签位置中使用该间隙,则必须重新创建选项卡式窗格。
答案 1 :(得分:0)
确定。对我来说听起来有点奇怪......但是你可以有两个按钮:一个在GlassPane中(如果TabbedPane朝向顶部则可见)和一个在顶部的栏中(如果TabbedPane朝向右侧则可见)