mirror of
https://github.com/JFormDesigner/FlatLaf.git
synced 2025-12-09 08:15:09 +03:00
ToolBar: skip components with empty input map (e.g. JLabel) when using arrow keys to navigate in focusable buttons (related to issue #346)
This commit is contained in:
10
CHANGELOG.md
10
CHANGELOG.md
@@ -13,9 +13,13 @@ FlatLaf Change Log
|
|||||||
- Theming improvements: Reworks core themes to make it easier to create new
|
- Theming improvements: Reworks core themes to make it easier to create new
|
||||||
themes (e.g. reduced explicit colors by using color functions). **Note**:
|
themes (e.g. reduced explicit colors by using color functions). **Note**:
|
||||||
There are minor incompatible changes in FlatLaf properties files. (PR #390)
|
There are minor incompatible changes in FlatLaf properties files. (PR #390)
|
||||||
- ToolBar: Toolbars are no longer floatable by default (dots on left side of
|
- ToolBar:
|
||||||
toolbar that allows dragging toolbar). Use `UIManager.put(
|
- Toolbars are no longer floatable by default (dots on left side of toolbar
|
||||||
"ToolBar.floatable", true )` if you want the old behavior.
|
that allows dragging toolbar). Use `UIManager.put( "ToolBar.floatable", true
|
||||||
|
)` if you want the old behavior.
|
||||||
|
- Skip components with empty input map (e.g. `JLabel`) when using arrow keys
|
||||||
|
to navigate in focusable buttons (if UI value `ToolBar.focusableButtons` is
|
||||||
|
`true`).
|
||||||
- Added more color functions to class `ColorFunctions` for easy use in
|
- Added more color functions to class `ColorFunctions` for easy use in
|
||||||
applications: `lighten()`, `darken()`, `saturate()`, `desaturate()`, `spin()`,
|
applications: `lighten()`, `darken()`, `saturate()`, `desaturate()`, `spin()`,
|
||||||
`tint()`, `shade()` and `luma()`.
|
`tint()`, `shade()` and `luma()`.
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import java.awt.event.ContainerListener;
|
|||||||
import java.beans.PropertyChangeListener;
|
import java.beans.PropertyChangeListener;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import javax.swing.AbstractButton;
|
import javax.swing.AbstractButton;
|
||||||
|
import javax.swing.InputMap;
|
||||||
import javax.swing.JComponent;
|
import javax.swing.JComponent;
|
||||||
import javax.swing.UIManager;
|
import javax.swing.UIManager;
|
||||||
import javax.swing.border.Border;
|
import javax.swing.border.Border;
|
||||||
@@ -194,6 +195,52 @@ public class FlatToolBarUI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Does the same as super.navigateFocusedComp() with the exception that components
|
||||||
|
* with empty input map (e.g. JLabel) are skipped.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected void navigateFocusedComp( int direction ) {
|
||||||
|
int count = toolBar.getComponentCount();
|
||||||
|
|
||||||
|
if( focusedCompIndex < 0 || focusedCompIndex >= count )
|
||||||
|
return;
|
||||||
|
|
||||||
|
int add;
|
||||||
|
switch( direction ) {
|
||||||
|
case EAST: case SOUTH: add = 1; break;
|
||||||
|
case WEST: case NORTH: add = -1; break;
|
||||||
|
default: return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for( int i = focusedCompIndex + add; i != focusedCompIndex; i += add ) {
|
||||||
|
if( i < 0 )
|
||||||
|
i = count - 1;
|
||||||
|
else if( i >= count )
|
||||||
|
i = 0;
|
||||||
|
|
||||||
|
Component c = toolBar.getComponentAtIndex( i );
|
||||||
|
|
||||||
|
// see Component.canBeFocusOwner()
|
||||||
|
if( c == null || !c.isEnabled() || !c.isVisible() || !c.isDisplayable() || !c.isFocusable() )
|
||||||
|
continue; // skip
|
||||||
|
|
||||||
|
// check whether component has a empty input map to skip components that
|
||||||
|
// are focusable, but do nothing when focused (e.g. JLabel)
|
||||||
|
if( c instanceof JComponent ) {
|
||||||
|
// see LayoutFocusTraversalPolicy.accept()
|
||||||
|
InputMap inputMap = ((JComponent)c).getInputMap( JComponent.WHEN_FOCUSED );
|
||||||
|
while( inputMap != null && inputMap.size() == 0 )
|
||||||
|
inputMap = inputMap.getParent();
|
||||||
|
if( inputMap == null )
|
||||||
|
continue; // skip
|
||||||
|
}
|
||||||
|
|
||||||
|
c.requestFocus();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// disable rollover border
|
// disable rollover border
|
||||||
@Override protected void setBorderToRollover( Component c ) {}
|
@Override protected void setBorderToRollover( Component c ) {}
|
||||||
@Override protected void setBorderToNonRollover( Component c ) {}
|
@Override protected void setBorderToNonRollover( Component c ) {}
|
||||||
|
|||||||
Reference in New Issue
Block a user