2012-04-19 52 views
0

原始頂部突起定位設置:JTabbedPane的間距

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

有問題的正確選項卡中方向設置:

enter image description here

從上面的圖形用戶界面,我JTabbedPane中(右邊的藍色標籤)與「退出」按鈕(使用GlassPane渲染)重疊。

注意:退出按鈕使用GlassPane渲染到右上角。

我想要一些技術建議移動藍色標籤給「退出」按鈕一些間距?

代碼用於產生玻璃面板插入退出按鈕,如下所示:

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); 

} 

感謝。

+2

如果你不想讓事情重疊,你爲什麼要使用玻璃窗格?讓佈局經理爲你做這些事情。 – keuleJ 2012-04-19 05:15:39

+0

當選項卡設置爲頂部定位時,退出按鈕將在選項卡旁邊很好地對齊,但當選項卡定位在右邊時,它將重疊。我想在右上角有退出按鈕。 JFrame的關閉按鈕用於將窗口圖標化爲系統托盤,因此應該添加用於關閉應用程序的「退出」按鈕。 – thotheolh 2012-04-19 05:23:46

+0

哪一部分解釋了「玻璃板」的使用? – 2012-04-19 05:34:16

回答

0

好的。聽起來有點奇怪,但我可以有2個按鈕:GlassPane中的一個(如果TabbedPane頂部朝上,則可見),頂部的Bar中有一個(如果TabbedPane朝向右側,則可見)

1

那麼,我會爲您提供從移動的glassPane的退出按鈕,一些適當的容器,但非標準的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」項下的插入,您可以操作選項卡運行和選項卡式窗格邊之間的間距。請注意,當選項卡位置與TOP不同時,這些插頁會旋轉。所以如果你想用RIGHT選項卡修改頂部空間位置,你應該修改左邊的那個,而不是頂部的那個,就像我在我的例子中那樣。

並且不要忘記將舊的Insets值放回去,否則該更改將影響更改後創建的所有選項卡式窗格。

另外我不能保證這將適用於所有的本地用戶界面,但我認爲應該支持這些基本功能。至少它在Windows,Mac OS和Metal LaF中受到支持。

還有一件事 - 您將無法在運行時爲已創建的選項卡窗格更改選項卡區域插入,因爲它在創建時保存到特定的系統UI中,並且無法更新該值(atleast沒有使用反射「功能」和猛烈訪問私人領域)。因此,如果您只希望在某種類型的選項卡布局中找到差距,您將不得不重新創建選項卡式窗格。