Zasadniczo konieczne będzie dostarczenie "renderer" dla zakładki. Aby uzyskać więcej informacji, patrz JTabbedPane.setTabComponentAt(...).
Podstawową ideą jest dostarczenie komponentu, który zostanie umieszczony na zakładce.
Zazwyczaj tworzę JPanel, do którego dodaję JLabel (dla tytułu) i, w zależności od tego, co chcę wyświetlić, jakiś rodzaj kontroli, który działa jak akcja zamykająca.
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);
teraz gdzie indziej, ja ustanowić procedurę obsługi akcji ...
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 ;)
}
}
}
Teraz tak łatwo użyć dowolnego komponentu chcesz i dołączyć do niego słuchacza myszy i monitorowania kliknięć myszką. ..
Updated
powyższy przykład usunie tylko kartę aktualnie aktywny, istnieje kilka wa ys, aby to naprawić.
Najlepiej jest prawdopodobnie zapewnić pewne środki do działania, aby znaleźć kartę to związane z ...
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 ;)
}
}
}
ta wykorzystuje nazwę zakładki (jako używane z JTabbedPane#addTab
), aby znaleźć i usunąć tab i skojarzony z nim składnik ...
Może to być pomocne - http://stackoverflow.com/questions/10620630/add-a-jlabel-in -the-jtabbedpane-header – user1329572
Dzięki, że to sprawdzę – Herman