2012-09-11 56 views
0

我正在Java Swing中实现一个UI。因此我使用JTabbedPane。 tabbedPane在启动时没有组件。当我添加一个选项卡到tabbedpane,tabbedpane的宽度增加,当我删除选项卡时,宽度调整到在启动时的宽度。这不应该发生。

选项卡式窗格位于具有网格包布局的JPanel上。将JTabbedPane的宽度设置为常量

布局代码:

Container contentPane = mainFrame.getContentPane(); 
contentPane.setLayout(new GridBagLayout()); 
GridBagConstraints c = new GridBagConstraints();   
// add the component tree 
initComponentTree(); 
c.gridx = 0; 
c.gridy = 0; 
c.gridheight = 1; 
c.gridwidth = 1; 
c.fill = GridBagConstraints.BOTH; 
c.anchor = GridBagConstraints.LINE_START; 
c.weightx = 1; 
c.weighty = 1; 
contentPane.add(componentTree, c);   
// add the tabbed pane 
initTabbedPane(); 
c.gridx = 1; 
c.weightx = 10; 
contentPane.add(tabbedPane, c);  
// add the status panel 
initStatusPanel(); 
c.gridx = 0; 
c.gridy = 1; 
c.gridwidth = 2; 
c.fill = GridBagConstraints.HORIZONTAL; 
c.anchor = GridBagConstraints.LINE_START; 
c.weightx = 0; 
c.weighty = 0; 
contentPane.add(statusPanel, c); 


希望有人能帮助!

+1

发布一些代码,显示您的gridbagconstraints。 – basiljames

+0

请参阅此链接:http://stackoverflow.com/questions/2510310/how-to-make-jtabbedpane-autoresize-to-fit-page-dimensions – Vinesh

回答

-1

你试过setSize()

JTabbedPane pane; 
pane.setSize(SOME_WIDTH_CONSTANT, SOME_HEIGHT_CONSTANT); 
+3

-1 setSize是_never_布局问题的答案,它是唯一的任务LayoutManager – kleopatra

2

尝试将GridBagConstraintsipadx值设置为期望的宽度。

+0

这不起作用,因为'ipadx'定义了x方向的填充。 – msp

0

我一直认为应该不惜一切代价避免GridBagLayout。它确实没有提供任何嵌板与其他布局无法实现的功能。它提供的唯一东西是很多挫折。

我会建议把你的JTabbedPane放在一个使用BorderLayout的面板中,并把它放在CENTER位置。如果你坚持使用GridBayLayout,你可以尝试使用setMinimumSize()方法,GridBagLayout是尊重该方法的布局管理器之一(BoxLayout是另一个)。