2009-12-28 16 views

Respuesta

9

Creo que debería ser capaz de gestionar mediante la construcción de su propio JTabbedPaneUI y se establece en el JTabbedPane usando setUI.

Su ComponentUI tiene métodos para mantener a los niños accesibles. Si especifica un JButton y un JLabel, entonces puede estar en el negocio.

Aunque no lo he intentado. Se trata de "bajo su propio riesgo" :)

+1

El uso de una IU personalizada es el camino a seguir. He hecho algo similar antes. Para la "X" en la pestaña para cerrarla, puede anular la pintura de la pestaña para incluir la X e instalar un detector de mouse que verifique si el usuario ha seleccionado esa área con el tutorial X. –

+2

Sun "Tabbed Panes" incluye un ejemplo de tal característica: http://java.sun.com/docs/books/tutorial/uiswing/components/tabbedpane.html – trashgod

3

Puede probar esto:

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

He intentado varias soluciones y llegó con éste:

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(
     "+")); 
    } 
} 

Así usted tiene:

Button near tab example

0

Escribir código siguiente en defecto Constructor de la clase

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

y crear Método para declarar e inicializar int tab2 = 2; en el arranque de la clase principal. Funcionó.

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