本文目录导读:

我来为您详细介绍 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 中非常实用的组件,适合用于创建多页面的界面应用,以上示例涵盖了大部分常用功能,您可以根据实际需求进行调整。
版权声明:足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播