UIForAnyMenuItem.java
package swingtree;
import sprouts.Val;
import javax.swing.*;
/**
* A builder for {@link JMenuItem}s.
*
* @param <I> The type of the builder itself. This is used to allow for method chaining.
* @param <M> The type of the {@link JMenuItem} being built.
*/
public abstract class UIForAnyMenuItem<I, M extends JMenuItem> extends UIForAnyButton<I, M>
{
/**
* Sets the key combination which invokes the wrapped {@link JMenuItem}'s
* action listeners without navigating the menu hierarchy. It is the
* UI's responsibility to install the correct action. Note that
* when the keyboard accelerator is typed, it will work whether or
* whether not the menu is currently displayed.
*
* @param keyStroke the <code>KeyStroke</code> which will
* serve as an accelerator
* @return This very builder to allow for method chaining.
*/
public I withKeyStroke( KeyStroke keyStroke ) {
return _with( thisComponent ->
thisComponent.setAccelerator(keyStroke)
)
._this();
}
/**
* Sets the key combination property which invokes the wrapped {@link JMenuItem}'s
* action listeners without navigating the menu hierarchy. It is the
* UI's responsibility to install the correct action. Note that
* when the keyboard accelerator is typed, it will work whether or
* whether not the menu is currently displayed.
*
* @param keyStroke the dynamically set <code>KeyStroke</code> property which will
* serve as an accelerator
* @return This very builder to allow for method chaining.
*/
public I withKeyStroke( Val<KeyStroke> keyStroke ) {
return _withOnShow( keyStroke, (thisComponent,value) -> {
thisComponent.setAccelerator(value);
})
._with( thisComponent -> {
thisComponent.setAccelerator(keyStroke.orElseNull());
})
._this();
}
}