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