SplitPane: implemented one-touch buttons

This commit is contained in:
Karl Tauber
2019-09-08 18:54:25 +02:00
parent 83f88cd3a8
commit 650ce12c22
8 changed files with 185 additions and 20 deletions

View File

@@ -118,6 +118,7 @@ public class FlatArrowButton
g.fillRect( 0, 0, width, height );
}
int direction = getDirection();
boolean vert = (direction == NORTH || direction == SOUTH);
int w = scale( 9 );

View File

@@ -16,7 +16,12 @@
package com.formdev.flatlaf.ui;
import java.awt.Color;
import java.awt.Cursor;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JSplitPane;
import javax.swing.SwingConstants;
import javax.swing.UIManager;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.basic.BasicSplitPaneDivider;
@@ -33,6 +38,8 @@ import com.formdev.flatlaf.util.UIScale;
* @uiDefault SplitPane.border Border
* @uiDefault SplitPaneDivider.border Border
* @uiDefault SplitPaneDivider.draggingColor Color only used if continuousLayout is false
* @uiDefault SplitPaneDivider.oneTouchArrowColor Color
* @uiDefault SplitPaneDivider.oneTouchHoverArrowColor Color
*
* @author Karl Tauber
*/
@@ -40,6 +47,8 @@ public class FlatSplitPaneUI
extends BasicSplitPaneUI
{
private Boolean continuousLayout;
private Color oneTouchArrowColor;
private Color oneTouchHoverArrowColor;
public static ComponentUI createUI( JComponent c ) {
return new FlatSplitPaneUI();
@@ -47,6 +56,11 @@ public class FlatSplitPaneUI
@Override
protected void installDefaults() {
// get one-touch colors before invoking super.installDefaults() because they are
// used in there on LaF switching
oneTouchArrowColor = UIManager.getColor( "SplitPaneDivider.oneTouchArrowColor" );
oneTouchHoverArrowColor = UIManager.getColor( "SplitPaneDivider.oneTouchHoverArrowColor" );
super.installDefaults();
continuousLayout = (Boolean) UIManager.get( "SplitPane.continuousLayout" );
@@ -64,7 +78,7 @@ public class FlatSplitPaneUI
//---- class FlatSplitPaneDivider -----------------------------------------
private static class FlatSplitPaneDivider
private class FlatSplitPaneDivider
extends BasicSplitPaneDivider
{
public FlatSplitPaneDivider( BasicSplitPaneUI ui ) {
@@ -75,5 +89,38 @@ public class FlatSplitPaneUI
public void setDividerSize( int newSize ) {
super.setDividerSize( UIScale.scale( newSize ) );
}
@Override
protected JButton createLeftOneTouchButton() {
return new FlatOneTouchButton( true );
}
@Override
protected JButton createRightOneTouchButton() {
return new FlatOneTouchButton( false );
}
//---- class FlatOneTouchButton ---------------------------------------
private class FlatOneTouchButton
extends FlatArrowButton
{
private final boolean left;
public FlatOneTouchButton( boolean left ) {
super( SwingConstants.NORTH, oneTouchArrowColor, null, oneTouchHoverArrowColor, null );
setCursor( Cursor.getPredefinedCursor( Cursor.DEFAULT_CURSOR ) );
this.left = left;
}
@Override
public int getDirection() {
return (orientation == JSplitPane.VERTICAL_SPLIT)
? (left ? SwingConstants.NORTH : SwingConstants.SOUTH)
: (left ? SwingConstants.WEST : SwingConstants.EAST);
}
}
}
}

View File

@@ -175,6 +175,7 @@ Slider.disabledForeground=4c5052
#---- SplitPane ----
SplitPaneDivider.draggingColor=646464
SplitPaneDivider.oneTouchHoverArrowColor=7A7D81
#---- TabbedPane ----

View File

@@ -239,7 +239,9 @@ Spinner.padding=@textComponentMargin
SplitPane.dividerSize=5
SplitPane.continuousLayout=true
SplitPane.border=null
SplitPane.centerOneTouchButtons=true
SplitPaneDivider.border=null
SplitPaneDivider.oneTouchArrowColor=@@ComboBox.buttonArrowColor
#---- TabbedPane ----

View File

@@ -175,6 +175,7 @@ Slider.disabledForeground=c0c0c0
#---- SplitPane ----
SplitPaneDivider.draggingColor=c4c4c4
SplitPaneDivider.oneTouchHoverArrowColor=333333
#---- TabbedPane ----