TabbedPane: search for label or text component in custom tab component and use its text in "more tabs" popup (issue #207; PR #190)

This commit is contained in:
Karl Tauber
2020-11-10 15:28:25 +01:00
parent 5b8f922273
commit 8594e78287

View File

@@ -60,6 +60,7 @@ import javax.swing.ButtonModel;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
@@ -76,6 +77,7 @@ import javax.swing.event.PopupMenuListener;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.UIResource;
import javax.swing.plaf.basic.BasicTabbedPaneUI;
import javax.swing.text.JTextComponent;
import javax.swing.text.View;
import com.formdev.flatlaf.FlatLaf;
import com.formdev.flatlaf.util.Animator;
@@ -1549,7 +1551,11 @@ public class FlatTabbedPaneUI
}
protected JMenuItem createMenuItem( int index ) {
JMenuItem menuItem = new JMenuItem( tabPane.getTitleAt( index ), tabPane.getIconAt( index ) );
String title = tabPane.getTitleAt( index );
if( title == null || title.isEmpty() )
title = findTabTitle( tabPane.getTabComponentAt( index ) );
JMenuItem menuItem = new JMenuItem( title, tabPane.getIconAt( index ) );
menuItem.setDisabledIcon( tabPane.getDisabledIconAt( index ) );
menuItem.setToolTipText( tabPane.getToolTipTextAt( index ) );
@@ -1570,6 +1576,33 @@ public class FlatTabbedPaneUI
return menuItem;
}
/**
* Search for label or text component in custom tab component and return its text.
*/
private String findTabTitle( Component c ) {
if( c == null )
return null;
String title = null;
if( c instanceof JLabel )
title = ((JLabel)c).getText();
else if( c instanceof JTextComponent )
title = ((JTextComponent)c).getText();
if( title != null && !title.isEmpty() )
return title;
if( c instanceof Container ) {
for( Component child : ((Container)c).getComponents() ) {
title = findTabTitle( child );
if( title != null )
return title;
}
}
return null;
}
protected void selectTab( int index ) {
tabPane.setSelectedIndex( index );
ensureSelectedTabIsVisible();