2009-12-28 57 views

回答

9

我想你應該能夠建立自己的JTabbedPaneUI並使用setUI設置它的JTabbedPane來管理它。

你的ComponentUI有方法來獲得無障礙兒童。如果您指定JButtonJLabel,那麼您可能正在營業。

雖然我沒有嘗試過這個。這是 「風險自擔」 :)

+1

使用自定義UI是最好的選擇。我之前做過類似的事情。對於要關閉的選項卡上的「X」,您可以覆蓋選項卡本身的繪製以包含X並安裝鼠標偵聽器,以檢查用戶是否用X選擇了該區域。 – 2009-12-28 21:15:09

+2

Sun的「選項卡式窗格」教程包括一個這樣的功能的例子:http://java.sun.com/docs/books/tutorial/uiswing/components/tabbedpane.html – trashgod 2009-12-28 22:09:52

3

你可以試試這個:

public static void main (String[] args) { 
    JFrame parent = new JFrame(); 

    final JTabbedPane pane = new JTabbedPane(); 
    pane.addTab ("test", null); 
    FlowLayout f = new FlowLayout (FlowLayout.CENTER, 5, 0); 

    // Make a small JPanel with the layout and make it non-opaque 
    JPanel pnlTab = new JPanel (f); 
    pnlTab.setOpaque (false); 
    // Create a JButton for adding the tabs 
    JButton addTab = new JButton ("+"); 
    addTab.setOpaque (false); // 
    addTab.setBorder (null); 
    addTab.setContentAreaFilled (false); 
    addTab.setFocusPainted (false); 

    addTab.setFocusable (false); 

    pnlTab.add (addTab); 

    pane.setTabComponentAt (pane.getTabCount() - 1, pnlTab); 

    ActionListener listener = new ActionListener() { 
     @Override 
     public void actionPerformed (ActionEvent e) { 
      String title = "Tab " + String.valueOf (pane.getTabCount() - 1); 
      pane.addTab (title, new JLabel (title)); 
     } 
    }; 
    addTab.setFocusable (false); 
    addTab.addActionListener (listener); 
    pane.setVisible (true); 

    parent.add (pane); 
    parent.setSize (new Dimension (400, 200)); 
    parent.setVisible (true); 
} 

Screenshot

0

我嘗試了好幾種解決方案,並與這一個來:

import java.awt.Dimension; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTabbedPane; 

public class TestTab { 

    public static void main(String[] args) { 
    JFrame parent = new JFrame(); 

    final JTabbedPane tabEntity = new JTabbedPane(); 
    tabEntity.addTab("Details", null, new JScrollPane()); 
    tabEntity.addTab("Context", null, new JScrollPane()); 
    tabEntity.addTab("", null, new JScrollPane()); 

    addButtonToTab(tabEntity); 

    parent.add(tabEntity); 
    parent.setSize(new Dimension(400, 200)); 
    parent.setVisible(true); 
    } 

    public static void addButtonToTab(final JTabbedPane tabEntity) { 
    tabEntity.setTabComponentAt(tabEntity.getTabCount() - 1, new JButton(
     "+")); 
    } 
} 

所以你有:

Button near tab example

0

寫在默認構造函數下面的代碼

類中
JPanel panel = new JPanel(); 
    tabbedPane.addTab("Welcome", null, panel, null); 
    tabbedPane.addTab(" + ", null, panel1, null); 

    tabbedPane.addChangeListener(new ChangeListener() 
    { 
     public void stateChanged(ChangeEvent evt) 
     { 
      JTabbedPane tabbedPane = (JTabbedPane)evt.getSource(); 

      if(tabbedPane.getSelectedIndex() == tabbedPane.indexOfTab(" + ")) 
      { 
       createTab(); 
      } 
     } 
    }); 

,並創建方法來聲明,並在主類的初始化啓動int tab2 = 2;。它的工作。

private void createTab() 
{ 
    tabbedPane.addTab("New Tab",new Panel()); 
    tabbedPane.addTab(" + ",null,panel1,null); 
    tabbedPane.setSelectedIndex(tab2); 
    tab2++; 
}