По същество ще трябва да предоставите "рендърър" за раздела. Разгледайте JTabbedPane.setTabComponentAt(...) за повече информация.
Основната идея е да предоставите компонент, който ще бъде изложен в раздела.
Обикновено създавам JPanel, към който добавям JLabel (за заглавието) и, в зависимост от това, което искам да покажа, някакъв вид контрол, който действа като затварящо действие.
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);
Сега някъде другаде установявам манипулатора на действие...
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 ;)
}
}
}
Сега можете също толкова лесно да използвате всеки компонент, който харесвате и да прикачите слушател на мишката към него и да наблюдавате щракванията на мишката...
Актуализирано
Горният пример ще премахне само текущия активен раздел, има няколко начина да поправите това.
Най-добре е вероятно да предоставите някакви средства за действието за намиране на раздела, с който е свързан...
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 ;)
}
}
}
Това използва името на раздела (както се използва с JTabbedPane#addTab
), за да намери и след това премахне раздела и свързания с него компонент...
person
MadProgrammer
schedule
19.07.2012