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);
}
});
}
}
제거하지 않으려는 경우 구성 요소를 숨길 수 있습니다. – Arpit