本文目录导读:

我来为您详细介绍 JTabbedPane 的标签切换功能和使用方法。
JTabbedPane 基本使用
创建和添加标签页
import javax.swing.*;
import java.awt.*;
public class TabbedPaneDemo extends JFrame {
public TabbedPaneDemo() {
setTitle("JTabbedPane 示例");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 300);
setLocationRelativeTo(null);
// 创建标签面板
JTabbedPane tabbedPane = new JTabbedPane();
// 创建各个标签页的内容面板
JPanel panel1 = new JPanel();
panel1.add(new JLabel("这是第一个标签页"));
JPanel panel2 = new JPanel();
panel2.add(new JButton("按钮"));
JPanel panel3 = new JPanel();
panel3.add(new JTextField(20));
// 添加标签页
tabbedPane.addTab("首页", panel1);
tabbedPane.addTab("设置", panel2);
tabbedPane.addTab("quot;, panel3);
// 或者使用图标
// ImageIcon icon = new ImageIcon("icon.png");
// tabbedPane.addTab("标签", icon, panel, "提示信息");
add(tabbedPane);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
new TabbedPaneDemo().setVisible(true);
});
}
}
标签切换监听
// 添加标签切换监听器
tabbedPane.addChangeListener(e -> {
JTabbedPane source = (JTabbedPane) e.getSource();
int selectedIndex = source.getSelectedIndex();
String title = source.getTitleAt(selectedIndex);
Component component = source.getSelectedComponent();
System.out.println("切换到标签: " + title);
System.out.println("索引: " + selectedIndex);
});
编程式切换标签
// 通过索引切换 tabbedPane.setSelectedIndex(0); // 切换到第一个标签 // 通过组件切换 tabbedPane.setSelectedComponent(panel2); // 获取当前选中索引 int currentIndex = tabbedPane.getSelectedIndex(); // 获取当前选中组件 Component currentComponent = tabbedPane.getSelectedComponent();
标签位置设置
// 设置标签位置 tabbedPane.setTabPlacement(JTabbedPane.TOP); // 顶部(默认) tabbedPane.setTabPlacement(JTabbedPane.BOTTOM); // 底部 tabbedPane.setTabPlacement(JTabbedPane.LEFT); // 左侧 tabbedPane.setTabPlacement(JTabbedPane.RIGHT); // 右侧
标签布局模式
// 滚动布局(标签太多时显示滚动箭头) tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT); // 换行布局(标签太多时自动换行) tabbedPane.setTabLayoutPolicy(JTabbedPane.WRAP_TAB_LAYOUT);
完整示例:带工具栏的标签管理器
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
public class TabbedPaneManager extends JFrame {
private JTabbedPane tabbedPane;
private int tabCount = 1;
public TabbedPaneManager() {
setTitle("标签面板管理器");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(500, 400);
setLocationRelativeTo(null);
// 创建工具栏
JToolBar toolBar = new JToolBar();
JButton addBtn = new JButton("添加标签");
JButton removeBtn = new JButton("删除当前标签");
JButton prevBtn = new JButton("前一个");
JButton nextBtn = new JButton("后一个");
toolBar.add(addBtn);
toolBar.add(removeBtn);
toolBar.addSeparator();
toolBar.add(prevBtn);
toolBar.add(nextBtn);
// 创建标签面板
tabbedPane = new JTabbedPane();
tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
// 添加第一个标签
addNewTab("标签 " + tabCount);
// 添加标签事件
addBtn.addActionListener(e -> addNewTab("标签 " + (++tabCount)));
// 删除当前标签事件
removeBtn.addActionListener(e -> {
int index = tabbedPane.getSelectedIndex();
if (index >= 0) {
tabbedPane.removeTabAt(index);
}
});
// 切换标签事件
prevBtn.addActionListener(e -> {
int index = tabbedPane.getSelectedIndex();
if (index > 0) {
tabbedPane.setSelectedIndex(index - 1);
}
});
nextBtn.addActionListener(e -> {
int index = tabbedPane.getSelectedIndex();
if (index < tabbedPane.getTabCount() - 1) {
tabbedPane.setSelectedIndex(index + 1);
}
});
// 标签切换监听
tabbedPane.addChangeListener(e -> {
int index = tabbedPane.getSelectedIndex();
if (index >= 0) {
String title = tabbedPane.getTitleAt(index);
setTitle("当前标签: " + title);
}
});
// 添加右键菜单
tabbedPane.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (SwingUtilities.isRightMouseButton(e)) {
int index = tabbedPane.indexAtLocation(e.getX(), e.getY());
if (index >= 0) {
showPopupMenu(e.getX(), e.getY(), index);
}
}
}
});
// 布局
setLayout(new BorderLayout());
add(toolBar, BorderLayout.NORTH);
add(tabbedPane, BorderLayout.CENTER);
}
private void addNewTab(String title) {
JPanel panel = new JPanel(new BorderLayout());
JTextArea textArea = new JTextArea();
textArea.setText("这是 " + title + " 的内容");
panel.add(new JScrollPane(textArea), BorderLayout.CENTER);
// 添加带关闭按钮的标签
tabbedPane.addTab(title, panel);
int index = tabbedPane.indexOfComponent(panel);
// 设置标签组件(带关闭按钮)
JPanel tabComponent = createTabComponent(title, panel);
tabbedPane.setTabComponentAt(index, tabComponent);
// 切换到新标签
tabbedPane.setSelectedIndex(index);
}
private JPanel createTabComponent(String title, JPanel panel) {
JPanel tabPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 5, 0));
tabPanel.setOpaque(false);
JLabel label = new JLabel(title);
JButton closeBtn = new JButton("×");
closeBtn.setPreferredSize(new Dimension(20, 20));
closeBtn.setFont(new Font("Arial", Font.BOLD, 12));
closeBtn.setFocusable(false);
closeBtn.setBorderPainted(false);
closeBtn.setContentAreaFilled(false);
closeBtn.addActionListener(e -> {
int index = tabbedPane.indexOfComponent(panel);
if (index >= 0) {
tabbedPane.removeTabAt(index);
}
});
tabPanel.add(label);
tabPanel.add(closeBtn);
return tabPanel;
}
private void showPopupMenu(int x, int y, int index) {
JPopupMenu popup = new JPopupMenu();
JMenuItem closeItem = new JMenuItem("关闭");
JMenuItem closeOthersItem = new JMenuItem("关闭其他");
JMenuItem closeAllItem = new JMenuItem("关闭所有");
JMenuItem renameItem = new JMenuItem("重命名");
popup.add(closeItem);
popup.add(closeOthersItem);
popup.add(closeAllItem);
popup.addSeparator();
popup.add(renameItem);
// 关闭当前标签
closeItem.addActionListener(e -> tabbedPane.removeTabAt(index));
// 关闭其他标签
closeOthersItem.addActionListener(e -> {
String title = tabbedPane.getTitleAt(index);
tabbedPane.removeAll();
addNewTab(title);
});
// 关闭所有标签
closeAllItem.addActionListener(e -> tabbedPane.removeAll());
// 重命名标签
renameItem.addActionListener(e -> {
String newName = JOptionPane.showInputDialog(
this, "请输入新标签名:",
tabbedPane.getTitleAt(index));
if (newName != null && !newName.trim().isEmpty()) {
tabbedPane.setTitleAt(index, newName);
}
});
popup.show(tabbedPane, x, y);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
new TabbedPaneManager().setVisible(true);
});
}
}
| 方法 | 描述 |
|---|---|
addTab(title, component) |
添加标签页 |
removeTabAt(index) |
删除指定位置的标签 |
setSelectedIndex(index) |
切换到指定标签 |
getSelectedIndex() |
获取当前选中标签索引 |
getTabCount() |
获取标签总数 |
setTitleAt(index, title) |
修改标签标题 |
setTabPlacement(placement) |
设置标签位置 |
setTabLayoutPolicy(policy) |
设置标签布局策略 |
JTabbedPane 是 Java Swing 中非常实用的组件,适合用于创建多页面的界面应用,以上示例涵盖了大部分常用功能,您可以根据实际需求进行调整。