Java如何在JTabbedPane中检测选项卡选择更改?

在此示例中,您将学习如何检测JTabbedPane组件中的选项卡选择更改。要在选择选项卡时得到通知,您必须使用ChangeListener来向JTabbedPane组件添加一个addChangeListener()。此方法采用一个类实例,该类实例在实现ChangeListener其参数时实现接口。

在此示例中,我们ChangeListener在TabbedPaneSelection类中实现接口。并且我们需要stateChanged()为此接口协定定义的方法创建一个实现。通过在TabbedPaneSelection类中实现接口,我们不需要创建单独的类来专门实现此接口。这就是为什么在下面的代码片段中,我们this在调用addChangeListener()方法时仅使用关键字传递当前对象。

stateChanged()每次选择新标签时,都会触发此界面的方法。要获取选定的标签索引,您可以使用JTabbedPane的getSelectedIndex()方法。该getSelectedIndex()方法返回的索引是从零开始的,这意味着如果选择第一个选项卡,将获得的索引0,如果选择第二个选项卡,则将获得的索引1。

package org.nhooo.example.swing;

import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.*;

public class TabbedPaneSelection extends JPanel implements ChangeListener {
    public TabbedPaneSelection() {
        initializeUI();
    }

    public static void showFrame() {
        JPanel panel = new TabbedPaneSelection();
        panel.setOpaque(true);

        JFrame frame = new JFrame("JTabbedPane Selection Demo");
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setContentPane(panel);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                TabbedPaneSelection.showFrame();
            }
        });
    }

    private void initializeUI() {
        JTabbedPane tabbedPane = new JTabbedPane();

        JPanel dashboardPanel = new JPanel();
        tabbedPane.addTab("Dashboard", dashboardPanel);

        JPanel accountPanel = new JPanel();
        tabbedPane.addTab("Account", accountPanel);

        this.setLayout(new BorderLayout());
        this.setPreferredSize(new Dimension(500, 200));
        this.add(tabbedPane, BorderLayout.CENTER);

        // 将ChangeListener添加到选项卡式窗格。
        tabbedPane.addChangeListener(this);
    }

    public void stateChanged(ChangeEvent e) {
        JTabbedPane tabbedPane = (JTabbedPane) e.getSource();
        int selectedIndex = tabbedPane.getSelectedIndex();
        JOptionPane.showMessageDialog(null, "Selected Index: " + selectedIndex);
    }
}

如果运行上面显示的代码段,则将得到输出,如下图所示。如果单击该选项卡,将显示一个消息对话框,向您显示所选的索引。