在此示例中,您将学习如何检测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); } }
如果运行上面显示的代码段,则将得到输出,如下图所示。如果单击该选项卡,将显示一个消息对话框,向您显示所选的索引。