In sostanza, è necessario fornire un "renderer" per la scheda. Dai un'occhiata a JTabbedPane.setTabComponentAt(...) per maggiori informazioni.
L'idea di base è fornire un componente che verrà visualizzato nella scheda.
Generalmente creo un JPanel, al quale aggiungo una JLabel (per il titolo) e, a seconda di ciò che voglio visualizzare, un qualche tipo di controllo che agisce da azione ravvicinata.
tabPane.addTab(title, tabBody);
int index = tabPane.indexOfTab(title);
JPanel pnlTab = new JPanel(new GridBagLayout());
pnlTab.setOpaque(false);
JLabel lblTitle = new JLabel(title);
JButton btnClose = new JButton("x");
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
gbc.weightx = 1;
pnlTab.add(lblTitle, gbc);
gbc.gridx++;
gbc.weightx = 0;
pnlTab.add(btnClose, gbc);
tabPane.setTabComponentAt(index, pnlTab);
btnClose.addActionListener(myCloseActionHandler);
Ora da qualche altra parte, stabilisco il gestore di azione ...
public class MyCloseActionHandler implements ActionListener {
public void actionPerformed(ActionEvent evt) {
Component selected = tabPane.getSelectedComponent();
if (selected != null) {
tabPane.remove(selected);
// It would probably be worthwhile getting the source
// casting it back to a JButton and removing
// the action handler reference ;)
}
}
}
Ora, altrettanto facilmente utilizzare qualsiasi componente che ti piace e allega un listener del mouse ad esso e monitorare i clic del mouse. ..
Aggiornato
l'esempio rimuoverà solo la scheda attualmente attiva, ci sono un paio di wa ys per risolvere questo problema.
La cosa migliore è quello di fornire probabilmente alcuni mezzi per l'azione di trovare la scheda è associato con ...
public class MyCloseActionHandler implements ActionListener {
private String tabName;
public MyCloseActionHandler(String tabName) {
this.tabName = tabName;
}
public String getTabName() {
return tabName;
}
public void actionPerformed(ActionEvent evt) {
int index = tabPane.indexOfTab(getTabName());
if (index >= 0) {
tabPane.removeTabAt(index);
// It would probably be worthwhile getting the source
// casting it back to a JButton and removing
// the action handler reference ;)
}
}
}
Questo utilizza il nome della scheda (come quello usato con JTabbedPane#addTab
) per trovare e rimuovere il scheda e il suo componente associato ...
Questo potrebbe essere utile - http://stackoverflow.com/questions/10620630/add-a-jlabel-in -the-jtabbedpane-header – user1329572
Grazie ho intenzione di dare un'occhiata – Herman