Im Wesentlichen müssen Sie einen "Renderer" für die Registerkarte bereitstellen. Werfen Sie einen Blick auf JTabbedPane.setTabComponentAt(...) für weitere Informationen.
Die Grundidee besteht darin, eine Komponente bereitzustellen, die auf der Registerkarte angeordnet wird.
Normalerweise erstelle ich ein JPanel, auf dem ich ein JLabel (für den Titel) und, je nachdem, was ich anzeigen möchte, eine Art von Steuerelement hinzufügen, die als Schließaktion fungiert.
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);
Jetzt woanders, ich richte den Action-Handler ...
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 ;)
}
}
}
Nun, die Sie gerade verwenden, wie leicht jede Komponente, die Sie mögen und eine Maus Zuhörer daran binden und die Mausklicks überwachen. ..
Das obige Beispiel aktualisiert wird die gerade aktive Registerkarte nur entfernen, gibt es ein paar wa um das zu beheben.
Das Beste ist wohl einige Mittel für die Aktion bieten die Registerkarte zu finden, es mit verknüpft ist ...
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 ;)
}
}
}
Dieser den Namen Tab verwendet (wie bei JTabbedPane#addTab
verwendet) zu finden und entfernen Sie dann die Registerkarte und seine zugehörige Komponente ...
Dies kann hilfreich sein - http://stackoverflow.com/questions/10620630/add-a-jlabel-in -the-jtabbedpane-header – user1329572
Danke, ich werde es überprüfen – Herman