2009-12-28 11 views

Antwort

9

Ich denke, man sollte es in der Lage sein, zu verwalten, indem Sie Ihre eigenen JTabbedPaneUI Gebäude und auf den JTabbedPanesetUI mit Einstellung.

Ihre ComponentUI verfügt über Methoden, um Zugriff auf die zugänglichen Kinder zu erhalten. Wenn Sie eine JButton und eine JLabel angeben, sind Sie möglicherweise geschäftlich tätig.

Ich habe das selbst nicht versucht. Dies ist "auf eigene Gefahr" :)

+1

Mit einer benutzerdefinierten Benutzeroberfläche ist der Weg zu gehen. Ich habe schon einmal etwas Ähnliches gemacht. Für das "X" auf der Registerkarte, um es zu schließen, können Sie das Zeichnen der Registerkarte selbst überschreiben, um das X einzuschließen und einen Maus-Listener zu installieren, der überprüft, ob der Benutzer diesen Bereich mit dem X. –

+2

Sun-Tutorials "Tabbed Panes" ausgewählt hat enthält ein Beispiel für eine solche Funktion: http://java.sun.com/docs/books/tutorial/uiswing/components/tabbedpane.html – trashgod

3

Sie können dies versuchen:

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

Ich habe mehrere Lösungen ausprobiert und kam mit dieser:

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

So Sie haben:

Button near tab example

0

schreiben folgenden Code in Standard-Konstruktor Klasse

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

und Verfahren erstellen zu erklären und initialisiert int tab2 = 2; beim Starten der Hauptklasse. Seine Arbeit.

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