By Alvin Alexander. Last updated: June 4, 2016
Summary: A JTabbedPane tab selection example.
Here's an example of some code where I'm detecting when a user selects a tab in a JTabbedPane. There are pretty much just three important pieces of code, and I've labeled those with comments and the numbers 1, 2, and 3.
package com.devdaily.myapp.view;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class MyWidgetPanel extends JPanel {
BorderLayout borderLayout1 = new BorderLayout();
JPanel northPanel = new JPanel();
FlowLayout flowLayout1 = new FlowLayout();
MyWidgetController controller;
JTabbedPane mainTabbedPanel = new JTabbedPane();
MyWidgetMapPanel myWidgetMapPanel;
MyWidgetTablePanel myWidgetTablePanel;
private String TAB_TITLE_MAP = "Map";
private String TAB_TITLE_TABLE = "Table";
//JPanel palettePanel = new JPanel();
public MyWidgetPanel(MyWidgetController controller,
MyWidgetMapPanel myWidgetMapPanel,
MyWidgetTablePanel myWidgetTablePanel) {
this.controller = controller;
this.myWidgetMapPanel = myWidgetMapPanel;
this.myWidgetTablePanel = myWidgetTablePanel;
this.setLayout(borderLayout1);
northPanel.setLayout(flowLayout1);
flowLayout1.setAlignment(FlowLayout.LEFT);
mainTabbedPanel.setTabPlacement(JTabbedPane.LEFT);
mainTabbedPanel.setFont(new java.awt.Font("Comic Sans MS", 0, 14));
// 1
mainTabbedPanel.addChangeListener(new MyWidgetPanel_mainTabbedPanel_changeAdapter(this));
this.add(northPanel, BorderLayout.NORTH);
this.add(mainTabbedPanel, BorderLayout.CENTER);
northPanel.add(formsPalettePanel, null);
mainTabbedPanel.add(myWidgetMapPanel, TAB_TITLE_MAP);
mainTabbedPanel.add(myWidgetTablePanel, TAB_TITLE_TABLE);
}
// 2
void mainTabbedPanel_stateChanged(ChangeEvent e) {
JTabbedPane tabSource = (JTabbedPane) e.getSource();
String tab = tabSource.getTitleAt(tabSource.getSelectedIndex());
if (tab.equals(TAB_TITLE_TABLE)) {
controller.updateMapTable();
}
if (tab.equals(TAB_TITLE_MAP)) {
controller.updateMapMap();
}
}
}
// 3
class MyWidgetPanel_mainTabbedPanel_changeAdapter implements javax.swing.event.ChangeListener {
MyWidgetPanel adaptee;
MyWidgetPanel_mainTabbedPanel_changeAdapter(MyWidgetPanel adaptee) {
this.adaptee = adaptee;
}
public void stateChanged(ChangeEvent e) {
adaptee.mainTabbedPanel_stateChanged(e);
}
}
Hopefully you can dig through this "JTabbedPane tab selection" code to see what's really happening here. Here are some brief notes:
- Create a JTabbedPane.
- Add a change listener to that JTabbedPane (see comment 1).
- Create the change listener, which in my case is the class I created by comment 3.
- Implement the desired behavior in the
stateChangedmethod. In my case I call the method defined by comment #2.
I hope that's enough to get you going whenever you need to detect that a user has selected a JTabbedPane tab.

