Java Swing - Knowing if a tab has been added to ChangeListener

Say I have a JTabbedPane with ChangeListener

JTabbedPane tabbedPane = new JTabbedPane(); // Add few tabs ..... ..... tabbedPane.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent changeEvent) { // How to determine if the changeEvent was fired because of a tab remove/add ? } }); 

and somewhere I do

 tabbedPane.removeTabAt(2); 

and somewhere else

 tabbedPane.add(panel, 0); 

Now I need to activate ChangeListener, is there a way to determine inside the listener if it was called due to the remove / add tab?

EDIT: I basically try to perform some actions only when the user switches between tabs, and not when adding or removing.

+4
source share
4 answers

Depending on the exact requirement, you can track the selected component and do only what has changed:

 ChangeListener l = new ChangeListener() { Component lastSelected = tabbedPane.getSelectedComponent(); @Override public void stateChanged(ChangeEvent e) { if (lastSelected != tabbedPane.getSelectedComponent()) { LOG.info("changed: " + tabbedPane.getSelectedIndex()); lastSelected = tabbedPane.getSelectedComponent(); } } }; tabbedPane.addChangeListener(l); 

It may not seem good enough, because it will work if the deleted selected tab is deleted.

+2
source

If I remember correctly, JTabbedPane fires the componentAdded() event (defined in the container) when a new tab is added and the componentRemoved() event if the tab is removed.

You must be able to listen to adding or removing tabs by registering a ContainerListener

http://docs.oracle.com/javase/7/docs/api/java/awt/Container.html#addContainerListener (java.awt. event.ContainerListener)

The stateChanged() event is just a side effect of the add because the JTabbedPanel automatically switches to a new tab.

+7
source

You can also examine the client __index_to_remove__ property, which is installed by removeTabAt() .

+2
source

By monitoring the current number of tabs, you can detect a change in selection based on adding or removing

 ChangeListener l = new ChangeListener() { int lastTabCount = tabbedPane.getTabCount(); Component lastSelected = tabbedPane.getSelectedComponent(); @Override public void stateChanged(ChangeEvent e) { if (lastSelected != tabbedPane.getSelectedIndex()) { int currentTabCount = tabbedPane.getTabCount(); if (lastTabCount == currentTabCount ) { LOG.info("changed: " + tabbedPane.getSelectedIndex()); } else if (lastTabCount < currentTabCount) LOG.info("changed due to delete: " + tabbedPane.getSelectedIndex()); } else if (lastTabCount > currentTabCount) LOG.info("changed due to add: " + tabbedPane.getSelectedIndex()); } lastTabCount = tabbedPane.getTabCount(); lastSelected = tabbedPane.getSelectedComponent(); } } }; tabbedPane.addChangeListener(l); 
0
source

All Articles