JTabbedPane.removeTabAt
タブのみを削除しますが、タブ内に配置したコンポーネントは削除しません。したがって、特定のコンポーネントのタブを移動するには、コンポーネントの新しいタブを で新しい位置に挿入するだけでJTabbedPane.insertTab
、古いタブが暗黙的に削除されます。または、自分で削除して、後で再度追加することもできます。どちらの方法も問題なく機能します。
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.SwingUtilities;
public class ReorderTabs {
private static void addTab(final JTabbedPane tabbedPane, final String title) {
final JPanel panel = new JPanel(new BorderLayout());
JLabel content = new JLabel(title + " - content", JLabel.CENTER);
panel.add(content, BorderLayout.CENTER);
JButton toFrontButton = new JButton("|<");
toFrontButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
// Re-insert the component in a new tab at the front. The tabbed pane will remove the old tab.
tabbedPane.insertTab(title, null, panel, null, 0);
}
});
panel.add(toFrontButton, BorderLayout.WEST);
JButton toBackButton = new JButton(">|");
toBackButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// Remove the component from the tab. The component will not be destroyed ...
int index = tabbedPane.indexOfComponent(panel);
tabbedPane.removeTabAt(index);
// ... and can be added again (or inserted at an arbitrary index with insertTab).
tabbedPane.addTab(title, panel);
}
});
panel.add(toBackButton, BorderLayout.EAST);
tabbedPane.addTab(title, panel);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JTabbedPane tabbedPane = new JTabbedPane();
addTab(tabbedPane, "Tab #1");
addTab(tabbedPane, "Tab #2");
addTab(tabbedPane, "Tab #3");
addTab(tabbedPane, "Tab #4");
JFrame frame = new JFrame("Reorder Tabs Demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(tabbedPane, BorderLayout.CENTER);
frame.setSize(400, 200);
frame.setVisible(true);
}
});
}
}