Menu: hide mnemonics by default and show them only when Alt key is pressed (issue #43)

This commit is contained in:
Karl Tauber
2020-01-14 11:58:51 +01:00
parent 2459a3654b
commit 5c3638a5a4
10 changed files with 276 additions and 12 deletions

View File

@@ -3,6 +3,8 @@ FlatLaf Change Log
## Unreleased ## Unreleased
- Hide menu mnemonics by default and show them only when <kbd>Alt</kbd> key is
pressed. (issue #43)
- TabbedPane: In scroll-tab-layout, the cropped line is now hidden. (issue #40) - TabbedPane: In scroll-tab-layout, the cropped line is now hidden. (issue #40)
- Tree: UI default value `Tree.textBackground` now has a valid color and is no - Tree: UI default value `Tree.textBackground` now has a valid color and is no
longer `null`. longer `null`.

View File

@@ -28,6 +28,7 @@ import java.awt.Window;
import java.awt.event.KeyEvent; import java.awt.event.KeyEvent;
import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener; import java.beans.PropertyChangeListener;
import java.lang.ref.WeakReference;
import java.util.List; import java.util.List;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.logging.Level; import java.util.logging.Level;
@@ -66,6 +67,7 @@ public abstract class FlatLaf
private KeyEventPostProcessor mnemonicListener; private KeyEventPostProcessor mnemonicListener;
private static boolean showMnemonics; private static boolean showMnemonics;
private static WeakReference<Window> lastShowMnemonicWindow;
private Consumer<UIDefaults> postInitialization; private Consumer<UIDefaults> postInitialization;
@@ -391,18 +393,28 @@ public abstract class FlatLaf
if( !UIManager.getBoolean( "Component.hideMnemonics" ) ) if( !UIManager.getBoolean( "Component.hideMnemonics" ) )
return; return;
// get focus owner if( show ) {
Component focusOwner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner(); // get focus owner
if( focusOwner == null ) Component focusOwner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner();
return; if( focusOwner == null )
return;
// get focused window // get focused window
Window window = SwingUtilities.windowForComponent( focusOwner ); Window window = SwingUtilities.windowForComponent( focusOwner );
if( window == null ) if( window == null )
return; return;
// repaint components with mnemonics in focused window // repaint components with mnemonics in focused window
repaintMnemonics( window ); repaintMnemonics( window );
lastShowMnemonicWindow = new WeakReference<>( window );
} else if( lastShowMnemonicWindow != null ) {
Window window = lastShowMnemonicWindow.get();
if( window != null )
repaintMnemonics( window );
lastShowMnemonicWindow = null;
}
} }
private static void repaintMnemonics( Container container ) { private static void repaintMnemonics( Container container ) {

View File

@@ -17,8 +17,11 @@
package com.formdev.flatlaf.ui; package com.formdev.flatlaf.ui;
import static com.formdev.flatlaf.util.UIScale.scale; import static com.formdev.flatlaf.util.UIScale.scale;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.beans.PropertyChangeListener; import java.beans.PropertyChangeListener;
import javax.swing.JComponent; import javax.swing.JComponent;
import javax.swing.JMenuItem;
import javax.swing.plaf.ComponentUI; import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.basic.BasicCheckBoxMenuItemUI; import javax.swing.plaf.basic.BasicCheckBoxMenuItemUI;
@@ -74,4 +77,9 @@ public class FlatCheckBoxMenuItemUI
defaultTextIconGap = scale( defaultTextIconGap ); defaultTextIconGap = scale( defaultTextIconGap );
}; };
} }
@Override
protected void paintText( Graphics g, JMenuItem menuItem, Rectangle textRect, String text ) {
FlatMenuItemUI.paintText( g, menuItem, textRect, text, disabledForeground, selectionForeground );
}
} }

View File

@@ -17,10 +17,18 @@
package com.formdev.flatlaf.ui; package com.formdev.flatlaf.ui;
import static com.formdev.flatlaf.util.UIScale.scale; import static com.formdev.flatlaf.util.UIScale.scale;
import java.awt.Color;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.beans.PropertyChangeListener; import java.beans.PropertyChangeListener;
import javax.swing.ButtonModel;
import javax.swing.JComponent; import javax.swing.JComponent;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.plaf.ComponentUI; import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.basic.BasicMenuItemUI; import javax.swing.plaf.basic.BasicMenuItemUI;
import com.formdev.flatlaf.FlatLaf;
/** /**
* Provides the Flat LaF UI delegate for {@link javax.swing.JMenuItem}. * Provides the Flat LaF UI delegate for {@link javax.swing.JMenuItem}.
@@ -74,4 +82,26 @@ public class FlatMenuItemUI
defaultTextIconGap = scale( defaultTextIconGap ); defaultTextIconGap = scale( defaultTextIconGap );
}; };
} }
@Override
protected void paintText( Graphics g, JMenuItem menuItem, Rectangle textRect, String text ) {
paintText( g, menuItem, textRect, text, disabledForeground, selectionForeground );
}
public static void paintText( Graphics g, JMenuItem menuItem, Rectangle textRect,
String text, Color disabledForeground, Color selectionForeground )
{
FontMetrics fm = menuItem.getFontMetrics( menuItem.getFont() );
int mnemonicIndex = FlatLaf.isShowMnemonics() ? menuItem.getDisplayedMnemonicIndex() : -1;
ButtonModel model = menuItem.getModel();
g.setColor( !model.isEnabled()
? disabledForeground
: (model.isArmed() || (menuItem instanceof JMenu && model.isSelected())
? selectionForeground
: menuItem.getForeground()) );
FlatUIUtils.drawStringUnderlineCharAt( menuItem, g, text, mnemonicIndex,
textRect.x, textRect.y + fm.getAscent() );
}
} }

View File

@@ -17,8 +17,11 @@
package com.formdev.flatlaf.ui; package com.formdev.flatlaf.ui;
import static com.formdev.flatlaf.util.UIScale.scale; import static com.formdev.flatlaf.util.UIScale.scale;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.beans.PropertyChangeListener; import java.beans.PropertyChangeListener;
import javax.swing.JComponent; import javax.swing.JComponent;
import javax.swing.JMenuItem;
import javax.swing.plaf.ComponentUI; import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.basic.BasicMenuUI; import javax.swing.plaf.basic.BasicMenuUI;
@@ -77,4 +80,9 @@ public class FlatMenuUI
defaultTextIconGap = scale( defaultTextIconGap ); defaultTextIconGap = scale( defaultTextIconGap );
}; };
} }
@Override
protected void paintText( Graphics g, JMenuItem menuItem, Rectangle textRect, String text ) {
FlatMenuItemUI.paintText( g, menuItem, textRect, text, disabledForeground, selectionForeground );
}
} }

View File

@@ -17,8 +17,11 @@
package com.formdev.flatlaf.ui; package com.formdev.flatlaf.ui;
import static com.formdev.flatlaf.util.UIScale.scale; import static com.formdev.flatlaf.util.UIScale.scale;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.beans.PropertyChangeListener; import java.beans.PropertyChangeListener;
import javax.swing.JComponent; import javax.swing.JComponent;
import javax.swing.JMenuItem;
import javax.swing.plaf.ComponentUI; import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.basic.BasicRadioButtonMenuItemUI; import javax.swing.plaf.basic.BasicRadioButtonMenuItemUI;
@@ -74,4 +77,9 @@ public class FlatRadioButtonMenuItemUI
defaultTextIconGap = scale( defaultTextIconGap ); defaultTextIconGap = scale( defaultTextIconGap );
}; };
} }
@Override
protected void paintText( Graphics g, JMenuItem menuItem, Rectangle textRect, String text ) {
FlatMenuItemUI.paintText( g, menuItem, textRect, text, disabledForeground, selectionForeground );
}
} }

View File

@@ -51,6 +51,12 @@ class DemoFrame
DemoPrefs.getState().putInt( FlatLafDemo.KEY_TAB, tabbedPane.getSelectedIndex() ); DemoPrefs.getState().putInt( FlatLafDemo.KEY_TAB, tabbedPane.getSelectedIndex() );
} }
private void menuItemActionPerformed(ActionEvent e) {
SwingUtilities.invokeLater( () -> {
JOptionPane.showMessageDialog( this, e.getActionCommand(), "Menu Item", JOptionPane.PLAIN_MESSAGE );
} );
}
private void initComponents() { private void initComponents() {
// JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents // JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents
JMenuBar menuBar1 = new JMenuBar(); JMenuBar menuBar1 = new JMenuBar();
@@ -68,6 +74,14 @@ class DemoFrame
JMenuItem deleteMenuItem = new JMenuItem(); JMenuItem deleteMenuItem = new JMenuItem();
JMenu viewMenu = new JMenu(); JMenu viewMenu = new JMenu();
JCheckBoxMenuItem checkBoxMenuItem1 = new JCheckBoxMenuItem(); JCheckBoxMenuItem checkBoxMenuItem1 = new JCheckBoxMenuItem();
JMenu menu1 = new JMenu();
JMenu subViewsMenu = new JMenu();
JMenu subSubViewsMenu = new JMenu();
JMenuItem errorLogViewMenuItem = new JMenuItem();
JMenuItem searchViewMenuItem = new JMenuItem();
JMenuItem projectViewMenuItem = new JMenuItem();
JMenuItem structureViewMenuItem = new JMenuItem();
JMenuItem propertiesViewMenuItem = new JMenuItem();
JRadioButtonMenuItem radioButtonMenuItem1 = new JRadioButtonMenuItem(); JRadioButtonMenuItem radioButtonMenuItem1 = new JRadioButtonMenuItem();
JRadioButtonMenuItem radioButtonMenuItem2 = new JRadioButtonMenuItem(); JRadioButtonMenuItem radioButtonMenuItem2 = new JRadioButtonMenuItem();
JRadioButtonMenuItem radioButtonMenuItem3 = new JRadioButtonMenuItem(); JRadioButtonMenuItem radioButtonMenuItem3 = new JRadioButtonMenuItem();
@@ -103,27 +117,35 @@ class DemoFrame
//======== fileMenu ======== //======== fileMenu ========
{ {
fileMenu.setText("File"); fileMenu.setText("File");
fileMenu.setMnemonic('F');
//---- newMenuItem ---- //---- newMenuItem ----
newMenuItem.setText("New"); newMenuItem.setText("New");
newMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); newMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
newMenuItem.setMnemonic('N');
newMenuItem.addActionListener(e -> menuItemActionPerformed(e));
fileMenu.add(newMenuItem); fileMenu.add(newMenuItem);
//---- openMenuItem ---- //---- openMenuItem ----
openMenuItem.setText("Open"); openMenuItem.setText("Open");
openMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); openMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
openMenuItem.setMnemonic('O');
openMenuItem.addActionListener(e -> menuItemActionPerformed(e));
fileMenu.add(openMenuItem); fileMenu.add(openMenuItem);
fileMenu.addSeparator(); fileMenu.addSeparator();
//---- closeMenuItem ---- //---- closeMenuItem ----
closeMenuItem.setText("Close"); closeMenuItem.setText("Close");
closeMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_W, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); closeMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_W, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
closeMenuItem.setMnemonic('C');
closeMenuItem.addActionListener(e -> menuItemActionPerformed(e));
fileMenu.add(closeMenuItem); fileMenu.add(closeMenuItem);
fileMenu.addSeparator(); fileMenu.addSeparator();
//---- exitMenuItem ---- //---- exitMenuItem ----
exitMenuItem.setText("Exit"); exitMenuItem.setText("Exit");
exitMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); exitMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
exitMenuItem.setMnemonic('X');
exitMenuItem.addActionListener(e -> exitActionPerformed()); exitMenuItem.addActionListener(e -> exitActionPerformed());
fileMenu.add(exitMenuItem); fileMenu.add(exitMenuItem);
} }
@@ -132,37 +154,50 @@ class DemoFrame
//======== editMenu ======== //======== editMenu ========
{ {
editMenu.setText("Edit"); editMenu.setText("Edit");
editMenu.setMnemonic('E');
//---- undoMenuItem ---- //---- undoMenuItem ----
undoMenuItem.setText("Undo"); undoMenuItem.setText("Undo");
undoMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); undoMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
undoMenuItem.setMnemonic('U');
undoMenuItem.addActionListener(e -> menuItemActionPerformed(e));
editMenu.add(undoMenuItem); editMenu.add(undoMenuItem);
//---- redoMenuItem ---- //---- redoMenuItem ----
redoMenuItem.setText("Redo"); redoMenuItem.setText("Redo");
redoMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Y, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); redoMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Y, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
redoMenuItem.setMnemonic('R');
redoMenuItem.addActionListener(e -> menuItemActionPerformed(e));
editMenu.add(redoMenuItem); editMenu.add(redoMenuItem);
editMenu.addSeparator(); editMenu.addSeparator();
//---- cutMenuItem ---- //---- cutMenuItem ----
cutMenuItem.setText("Cut"); cutMenuItem.setText("Cut");
cutMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); cutMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
cutMenuItem.setMnemonic('C');
cutMenuItem.addActionListener(e -> menuItemActionPerformed(e));
editMenu.add(cutMenuItem); editMenu.add(cutMenuItem);
//---- copyMenuItem ---- //---- copyMenuItem ----
copyMenuItem.setText("Copy"); copyMenuItem.setText("Copy");
copyMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); copyMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
copyMenuItem.setMnemonic('O');
copyMenuItem.addActionListener(e -> menuItemActionPerformed(e));
editMenu.add(copyMenuItem); editMenu.add(copyMenuItem);
//---- pasteMenuItem ---- //---- pasteMenuItem ----
pasteMenuItem.setText("Paste"); pasteMenuItem.setText("Paste");
pasteMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); pasteMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
pasteMenuItem.setMnemonic('P');
pasteMenuItem.addActionListener(e -> menuItemActionPerformed(e));
editMenu.add(pasteMenuItem); editMenu.add(pasteMenuItem);
editMenu.addSeparator(); editMenu.addSeparator();
//---- deleteMenuItem ---- //---- deleteMenuItem ----
deleteMenuItem.setText("Delete"); deleteMenuItem.setText("Delete");
deleteMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0)); deleteMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0));
deleteMenuItem.setMnemonic('D');
deleteMenuItem.addActionListener(e -> menuItemActionPerformed(e));
editMenu.add(deleteMenuItem); editMenu.add(deleteMenuItem);
} }
menuBar1.add(editMenu); menuBar1.add(editMenu);
@@ -170,24 +205,84 @@ class DemoFrame
//======== viewMenu ======== //======== viewMenu ========
{ {
viewMenu.setText("View"); viewMenu.setText("View");
viewMenu.setMnemonic('V');
//---- checkBoxMenuItem1 ---- //---- checkBoxMenuItem1 ----
checkBoxMenuItem1.setText("Show Toolbar"); checkBoxMenuItem1.setText("Show Toolbar");
checkBoxMenuItem1.setSelected(true); checkBoxMenuItem1.setSelected(true);
checkBoxMenuItem1.setMnemonic('T');
checkBoxMenuItem1.addActionListener(e -> menuItemActionPerformed(e));
viewMenu.add(checkBoxMenuItem1); viewMenu.add(checkBoxMenuItem1);
//======== menu1 ========
{
menu1.setText("Show View");
menu1.setMnemonic('V');
//======== subViewsMenu ========
{
subViewsMenu.setText("Sub Views");
subViewsMenu.setMnemonic('S');
//======== subSubViewsMenu ========
{
subSubViewsMenu.setText("Sub sub Views");
subSubViewsMenu.setMnemonic('U');
//---- errorLogViewMenuItem ----
errorLogViewMenuItem.setText("Error Log");
errorLogViewMenuItem.setMnemonic('E');
errorLogViewMenuItem.addActionListener(e -> menuItemActionPerformed(e));
subSubViewsMenu.add(errorLogViewMenuItem);
}
subViewsMenu.add(subSubViewsMenu);
//---- searchViewMenuItem ----
searchViewMenuItem.setText("Search");
searchViewMenuItem.setMnemonic('S');
searchViewMenuItem.addActionListener(e -> menuItemActionPerformed(e));
subViewsMenu.add(searchViewMenuItem);
}
menu1.add(subViewsMenu);
//---- projectViewMenuItem ----
projectViewMenuItem.setText("Project");
projectViewMenuItem.setMnemonic('P');
projectViewMenuItem.addActionListener(e -> menuItemActionPerformed(e));
menu1.add(projectViewMenuItem);
//---- structureViewMenuItem ----
structureViewMenuItem.setText("Structure");
structureViewMenuItem.setMnemonic('T');
structureViewMenuItem.addActionListener(e -> menuItemActionPerformed(e));
menu1.add(structureViewMenuItem);
//---- propertiesViewMenuItem ----
propertiesViewMenuItem.setText("Properties");
propertiesViewMenuItem.setMnemonic('O');
propertiesViewMenuItem.addActionListener(e -> menuItemActionPerformed(e));
menu1.add(propertiesViewMenuItem);
}
viewMenu.add(menu1);
viewMenu.addSeparator(); viewMenu.addSeparator();
//---- radioButtonMenuItem1 ---- //---- radioButtonMenuItem1 ----
radioButtonMenuItem1.setText("Details"); radioButtonMenuItem1.setText("Details");
radioButtonMenuItem1.setSelected(true); radioButtonMenuItem1.setSelected(true);
radioButtonMenuItem1.setMnemonic('D');
radioButtonMenuItem1.addActionListener(e -> menuItemActionPerformed(e));
viewMenu.add(radioButtonMenuItem1); viewMenu.add(radioButtonMenuItem1);
//---- radioButtonMenuItem2 ---- //---- radioButtonMenuItem2 ----
radioButtonMenuItem2.setText("Small Icons"); radioButtonMenuItem2.setText("Small Icons");
radioButtonMenuItem2.setMnemonic('S');
radioButtonMenuItem2.addActionListener(e -> menuItemActionPerformed(e));
viewMenu.add(radioButtonMenuItem2); viewMenu.add(radioButtonMenuItem2);
//---- radioButtonMenuItem3 ---- //---- radioButtonMenuItem3 ----
radioButtonMenuItem3.setText("Large Icons"); radioButtonMenuItem3.setText("Large Icons");
radioButtonMenuItem3.setMnemonic('L');
radioButtonMenuItem3.addActionListener(e -> menuItemActionPerformed(e));
viewMenu.add(radioButtonMenuItem3); viewMenu.add(radioButtonMenuItem3);
} }
menuBar1.add(viewMenu); menuBar1.add(viewMenu);
@@ -195,9 +290,11 @@ class DemoFrame
//======== helpMenu ======== //======== helpMenu ========
{ {
helpMenu.setText("Help"); helpMenu.setText("Help");
helpMenu.setMnemonic('H');
//---- aboutMenuItem ---- //---- aboutMenuItem ----
aboutMenuItem.setText("About"); aboutMenuItem.setText("About");
aboutMenuItem.setMnemonic('A');
aboutMenuItem.addActionListener(e -> aboutActionPerformed()); aboutMenuItem.addActionListener(e -> aboutActionPerformed());
helpMenu.add(aboutMenuItem); helpMenu.add(aboutMenuItem);
} }

View File

@@ -1,4 +1,4 @@
JFDML JFormDesigner: "7.0.0.0.194" Java: "11.0.2" encoding: "UTF-8" JFDML JFormDesigner: "7.0.0.0.194" Java: "13.0.1" encoding: "UTF-8"
new FormModel { new FormModel {
contentType: "form/swing" contentType: "form/swing"
@@ -117,15 +117,20 @@ new FormModel {
add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) { add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) {
name: "fileMenu" name: "fileMenu"
"text": "File" "text": "File"
"mnemonic": 70
add( new FormComponent( "javax.swing.JMenuItem" ) { add( new FormComponent( "javax.swing.JMenuItem" ) {
name: "newMenuItem" name: "newMenuItem"
"text": "New" "text": "New"
"accelerator": static javax.swing.KeyStroke getKeyStroke( 78, 4226, false ) "accelerator": static javax.swing.KeyStroke getKeyStroke( 78, 4226, false )
"mnemonic": 78
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "menuItemActionPerformed", true ) )
} ) } )
add( new FormComponent( "javax.swing.JMenuItem" ) { add( new FormComponent( "javax.swing.JMenuItem" ) {
name: "openMenuItem" name: "openMenuItem"
"text": "Open" "text": "Open"
"accelerator": static javax.swing.KeyStroke getKeyStroke( 79, 4226, false ) "accelerator": static javax.swing.KeyStroke getKeyStroke( 79, 4226, false )
"mnemonic": 79
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "menuItemActionPerformed", true ) )
} ) } )
add( new FormComponent( "javax.swing.JPopupMenu$Separator" ) { add( new FormComponent( "javax.swing.JPopupMenu$Separator" ) {
name: "separator2" name: "separator2"
@@ -134,6 +139,8 @@ new FormModel {
name: "closeMenuItem" name: "closeMenuItem"
"text": "Close" "text": "Close"
"accelerator": static javax.swing.KeyStroke getKeyStroke( 87, 4226, false ) "accelerator": static javax.swing.KeyStroke getKeyStroke( 87, 4226, false )
"mnemonic": 67
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "menuItemActionPerformed", true ) )
} ) } )
add( new FormComponent( "javax.swing.JPopupMenu$Separator" ) { add( new FormComponent( "javax.swing.JPopupMenu$Separator" ) {
name: "separator1" name: "separator1"
@@ -142,21 +149,27 @@ new FormModel {
name: "exitMenuItem" name: "exitMenuItem"
"text": "Exit" "text": "Exit"
"accelerator": static javax.swing.KeyStroke getKeyStroke( 81, 4226, false ) "accelerator": static javax.swing.KeyStroke getKeyStroke( 81, 4226, false )
"mnemonic": 88
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "exitActionPerformed", false ) ) addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "exitActionPerformed", false ) )
} ) } )
} ) } )
add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) { add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) {
name: "editMenu" name: "editMenu"
"text": "Edit" "text": "Edit"
"mnemonic": 69
add( new FormComponent( "javax.swing.JMenuItem" ) { add( new FormComponent( "javax.swing.JMenuItem" ) {
name: "undoMenuItem" name: "undoMenuItem"
"text": "Undo" "text": "Undo"
"accelerator": static javax.swing.KeyStroke getKeyStroke( 90, 4226, false ) "accelerator": static javax.swing.KeyStroke getKeyStroke( 90, 4226, false )
"mnemonic": 85
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "menuItemActionPerformed", true ) )
} ) } )
add( new FormComponent( "javax.swing.JMenuItem" ) { add( new FormComponent( "javax.swing.JMenuItem" ) {
name: "redoMenuItem" name: "redoMenuItem"
"text": "Redo" "text": "Redo"
"accelerator": static javax.swing.KeyStroke getKeyStroke( 89, 4226, false ) "accelerator": static javax.swing.KeyStroke getKeyStroke( 89, 4226, false )
"mnemonic": 82
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "menuItemActionPerformed", true ) )
} ) } )
add( new FormComponent( "javax.swing.JPopupMenu$Separator" ) { add( new FormComponent( "javax.swing.JPopupMenu$Separator" ) {
name: "separator4" name: "separator4"
@@ -165,16 +178,22 @@ new FormModel {
name: "cutMenuItem" name: "cutMenuItem"
"text": "Cut" "text": "Cut"
"accelerator": static javax.swing.KeyStroke getKeyStroke( 88, 4226, false ) "accelerator": static javax.swing.KeyStroke getKeyStroke( 88, 4226, false )
"mnemonic": 67
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "menuItemActionPerformed", true ) )
} ) } )
add( new FormComponent( "javax.swing.JMenuItem" ) { add( new FormComponent( "javax.swing.JMenuItem" ) {
name: "copyMenuItem" name: "copyMenuItem"
"text": "Copy" "text": "Copy"
"accelerator": static javax.swing.KeyStroke getKeyStroke( 67, 4226, false ) "accelerator": static javax.swing.KeyStroke getKeyStroke( 67, 4226, false )
"mnemonic": 79
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "menuItemActionPerformed", true ) )
} ) } )
add( new FormComponent( "javax.swing.JMenuItem" ) { add( new FormComponent( "javax.swing.JMenuItem" ) {
name: "pasteMenuItem" name: "pasteMenuItem"
"text": "Paste" "text": "Paste"
"accelerator": static javax.swing.KeyStroke getKeyStroke( 86, 4226, false ) "accelerator": static javax.swing.KeyStroke getKeyStroke( 86, 4226, false )
"mnemonic": 80
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "menuItemActionPerformed", true ) )
} ) } )
add( new FormComponent( "javax.swing.JPopupMenu$Separator" ) { add( new FormComponent( "javax.swing.JPopupMenu$Separator" ) {
name: "separator3" name: "separator3"
@@ -183,15 +202,65 @@ new FormModel {
name: "deleteMenuItem" name: "deleteMenuItem"
"text": "Delete" "text": "Delete"
"accelerator": static javax.swing.KeyStroke getKeyStroke( 127, 0, false ) "accelerator": static javax.swing.KeyStroke getKeyStroke( 127, 0, false )
"mnemonic": 68
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "menuItemActionPerformed", true ) )
} ) } )
} ) } )
add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) { add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) {
name: "viewMenu" name: "viewMenu"
"text": "View" "text": "View"
"mnemonic": 86
add( new FormComponent( "javax.swing.JCheckBoxMenuItem" ) { add( new FormComponent( "javax.swing.JCheckBoxMenuItem" ) {
name: "checkBoxMenuItem1" name: "checkBoxMenuItem1"
"text": "Show Toolbar" "text": "Show Toolbar"
"selected": true "selected": true
"mnemonic": 84
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "menuItemActionPerformed", true ) )
} )
add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) {
name: "menu1"
"text": "Show View"
"mnemonic": 86
add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) {
name: "subViewsMenu"
"text": "Sub Views"
"mnemonic": 83
add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) {
name: "subSubViewsMenu"
"text": "Sub sub Views"
"mnemonic": 85
add( new FormComponent( "javax.swing.JMenuItem" ) {
name: "errorLogViewMenuItem"
"text": "Error Log"
"mnemonic": 69
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "menuItemActionPerformed", true ) )
} )
} )
add( new FormComponent( "javax.swing.JMenuItem" ) {
name: "searchViewMenuItem"
"text": "Search"
"mnemonic": 83
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "menuItemActionPerformed", true ) )
} )
} )
add( new FormComponent( "javax.swing.JMenuItem" ) {
name: "projectViewMenuItem"
"text": "Project"
"mnemonic": 80
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "menuItemActionPerformed", true ) )
} )
add( new FormComponent( "javax.swing.JMenuItem" ) {
name: "structureViewMenuItem"
"text": "Structure"
"mnemonic": 84
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "menuItemActionPerformed", true ) )
} )
add( new FormComponent( "javax.swing.JMenuItem" ) {
name: "propertiesViewMenuItem"
"text": "Properties"
"mnemonic": 79
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "menuItemActionPerformed", true ) )
} )
} ) } )
add( new FormComponent( "javax.swing.JPopupMenu$Separator" ) { add( new FormComponent( "javax.swing.JPopupMenu$Separator" ) {
name: "separator8" name: "separator8"
@@ -201,24 +270,32 @@ new FormModel {
"text": "Details" "text": "Details"
"selected": true "selected": true
"$buttonGroup": new FormReference( "buttonGroup1" ) "$buttonGroup": new FormReference( "buttonGroup1" )
"mnemonic": 68
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "menuItemActionPerformed", true ) )
} ) } )
add( new FormComponent( "javax.swing.JRadioButtonMenuItem" ) { add( new FormComponent( "javax.swing.JRadioButtonMenuItem" ) {
name: "radioButtonMenuItem2" name: "radioButtonMenuItem2"
"text": "Small Icons" "text": "Small Icons"
"$buttonGroup": new FormReference( "buttonGroup1" ) "$buttonGroup": new FormReference( "buttonGroup1" )
"mnemonic": 83
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "menuItemActionPerformed", true ) )
} ) } )
add( new FormComponent( "javax.swing.JRadioButtonMenuItem" ) { add( new FormComponent( "javax.swing.JRadioButtonMenuItem" ) {
name: "radioButtonMenuItem3" name: "radioButtonMenuItem3"
"text": "Large Icons" "text": "Large Icons"
"$buttonGroup": new FormReference( "buttonGroup1" ) "$buttonGroup": new FormReference( "buttonGroup1" )
"mnemonic": 76
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "menuItemActionPerformed", true ) )
} ) } )
} ) } )
add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) { add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) {
name: "helpMenu" name: "helpMenu"
"text": "Help" "text": "Help"
"mnemonic": 72
add( new FormComponent( "javax.swing.JMenuItem" ) { add( new FormComponent( "javax.swing.JMenuItem" ) {
name: "aboutMenuItem" name: "aboutMenuItem"
"text": "About" "text": "About"
"mnemonic": 65
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "aboutActionPerformed", false ) ) addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "aboutActionPerformed", false ) )
} ) } )
} ) } )

View File

@@ -126,13 +126,16 @@ public class FlatMenusTest
//======== menu5 ======== //======== menu5 ========
{ {
menu5.setText("text"); menu5.setText("text");
menu5.setMnemonic('T');
//---- menuItem7 ---- //---- menuItem7 ----
menuItem7.setText("text"); menuItem7.setText("text");
menuItem7.setMnemonic('X');
menu5.add(menuItem7); menu5.add(menuItem7);
//---- menuItem8 ---- //---- menuItem8 ----
menuItem8.setText("text"); menuItem8.setText("text");
menuItem8.setMnemonic('E');
menu5.add(menuItem8); menu5.add(menuItem8);
} }
menuBar1.add(menu5); menuBar1.add(menu5);
@@ -175,6 +178,7 @@ public class FlatMenusTest
//======== menu1 ======== //======== menu1 ========
{ {
menu1.setText("enabled"); menu1.setText("enabled");
menu1.setMnemonic('E');
} }
panel1.add(menu1, "cell 1 0"); panel1.add(menu1, "cell 1 0");
@@ -185,6 +189,7 @@ public class FlatMenusTest
//---- menuItem1 ---- //---- menuItem1 ----
menuItem1.setText("enabled"); menuItem1.setText("enabled");
menuItem1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, KeyEvent.CTRL_MASK)); menuItem1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, KeyEvent.CTRL_MASK));
menuItem1.setMnemonic('N');
panel1.add(menuItem1, "cell 1 1"); panel1.add(menuItem1, "cell 1 1");
//---- checkBoxMenuItemLabel ---- //---- checkBoxMenuItemLabel ----
@@ -194,6 +199,7 @@ public class FlatMenusTest
//---- checkBoxMenuItem1 ---- //---- checkBoxMenuItem1 ----
checkBoxMenuItem1.setText("enabled"); checkBoxMenuItem1.setText("enabled");
checkBoxMenuItem1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0)); checkBoxMenuItem1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0));
checkBoxMenuItem1.setMnemonic('A');
panel1.add(checkBoxMenuItem1, "cell 1 2"); panel1.add(checkBoxMenuItem1, "cell 1 2");
//---- radioButtonMenuItemLabel ---- //---- radioButtonMenuItemLabel ----
@@ -203,6 +209,7 @@ public class FlatMenusTest
//---- radioButtonMenuItem1 ---- //---- radioButtonMenuItem1 ----
radioButtonMenuItem1.setText("enabled"); radioButtonMenuItem1.setText("enabled");
radioButtonMenuItem1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0)); radioButtonMenuItem1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0));
radioButtonMenuItem1.setMnemonic('B');
panel1.add(radioButtonMenuItem1, "cell 1 3"); panel1.add(radioButtonMenuItem1, "cell 1 3");
//---- popupMenuSeparatorLabel ---- //---- popupMenuSeparatorLabel ----
@@ -230,6 +237,7 @@ public class FlatMenusTest
{ {
menu2.setText("disabled"); menu2.setText("disabled");
menu2.setEnabled(false); menu2.setEnabled(false);
menu2.setMnemonic('D');
} }
panel2.add(menu2, "cell 0 0"); panel2.add(menu2, "cell 0 0");
@@ -237,18 +245,21 @@ public class FlatMenusTest
menuItem2.setText("disabled"); menuItem2.setText("disabled");
menuItem2.setEnabled(false); menuItem2.setEnabled(false);
menuItem2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D, KeyEvent.ALT_MASK|KeyEvent.SHIFT_MASK)); menuItem2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D, KeyEvent.ALT_MASK|KeyEvent.SHIFT_MASK));
menuItem2.setMnemonic('I');
panel2.add(menuItem2, "cell 0 1"); panel2.add(menuItem2, "cell 0 1");
//---- checkBoxMenuItem2 ---- //---- checkBoxMenuItem2 ----
checkBoxMenuItem2.setText("disabled"); checkBoxMenuItem2.setText("disabled");
checkBoxMenuItem2.setEnabled(false); checkBoxMenuItem2.setEnabled(false);
checkBoxMenuItem2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0)); checkBoxMenuItem2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0));
checkBoxMenuItem2.setMnemonic('S');
panel2.add(checkBoxMenuItem2, "cell 0 2"); panel2.add(checkBoxMenuItem2, "cell 0 2");
//---- radioButtonMenuItem2 ---- //---- radioButtonMenuItem2 ----
radioButtonMenuItem2.setText("disabled"); radioButtonMenuItem2.setText("disabled");
radioButtonMenuItem2.setEnabled(false); radioButtonMenuItem2.setEnabled(false);
radioButtonMenuItem2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0)); radioButtonMenuItem2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0));
radioButtonMenuItem2.setMnemonic('L');
panel2.add(radioButtonMenuItem2, "cell 0 3"); panel2.add(radioButtonMenuItem2, "cell 0 3");
} }
add(panel2, "cell 2 1"); add(panel2, "cell 2 1");

View File

@@ -1,4 +1,4 @@
JFDML JFormDesigner: "7.0.0.0.194" Java: "11.0.2" encoding: "UTF-8" JFDML JFormDesigner: "7.0.0.0.194" Java: "13.0.1" encoding: "UTF-8"
new FormModel { new FormModel {
contentType: "form/swing" contentType: "form/swing"
@@ -23,13 +23,16 @@ new FormModel {
add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) { add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) {
name: "menu5" name: "menu5"
"text": "text" "text": "text"
"mnemonic": 84
add( new FormComponent( "javax.swing.JMenuItem" ) { add( new FormComponent( "javax.swing.JMenuItem" ) {
name: "menuItem7" name: "menuItem7"
"text": "text" "text": "text"
"mnemonic": 88
} ) } )
add( new FormComponent( "javax.swing.JMenuItem" ) { add( new FormComponent( "javax.swing.JMenuItem" ) {
name: "menuItem8" name: "menuItem8"
"text": "text" "text": "text"
"mnemonic": 69
} ) } )
} ) } )
add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) { add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) {
@@ -63,6 +66,7 @@ new FormModel {
add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) { add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) {
name: "menu1" name: "menu1"
"text": "enabled" "text": "enabled"
"mnemonic": 69
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 1 0" "value": "cell 1 0"
} ) } )
@@ -76,6 +80,7 @@ new FormModel {
name: "menuItem1" name: "menuItem1"
"text": "enabled" "text": "enabled"
"accelerator": static javax.swing.KeyStroke getKeyStroke( 65, 130, false ) "accelerator": static javax.swing.KeyStroke getKeyStroke( 65, 130, false )
"mnemonic": 78
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 1 1" "value": "cell 1 1"
} ) } )
@@ -89,6 +94,7 @@ new FormModel {
name: "checkBoxMenuItem1" name: "checkBoxMenuItem1"
"text": "enabled" "text": "enabled"
"accelerator": &KeyStroke0 static javax.swing.KeyStroke getKeyStroke( 112, 0, false ) "accelerator": &KeyStroke0 static javax.swing.KeyStroke getKeyStroke( 112, 0, false )
"mnemonic": 65
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 1 2" "value": "cell 1 2"
} ) } )
@@ -102,6 +108,7 @@ new FormModel {
name: "radioButtonMenuItem1" name: "radioButtonMenuItem1"
"text": "enabled" "text": "enabled"
"accelerator": #KeyStroke0 "accelerator": #KeyStroke0
"mnemonic": 66
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 1 3" "value": "cell 1 3"
} ) } )
@@ -130,6 +137,7 @@ new FormModel {
name: "menu2" name: "menu2"
"text": "disabled" "text": "disabled"
"enabled": false "enabled": false
"mnemonic": 68
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 0 0" "value": "cell 0 0"
} ) } )
@@ -138,6 +146,7 @@ new FormModel {
"text": "disabled" "text": "disabled"
"enabled": false "enabled": false
"accelerator": static javax.swing.KeyStroke getKeyStroke( 68, 585, false ) "accelerator": static javax.swing.KeyStroke getKeyStroke( 68, 585, false )
"mnemonic": 73
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 0 1" "value": "cell 0 1"
} ) } )
@@ -146,6 +155,7 @@ new FormModel {
"text": "disabled" "text": "disabled"
"enabled": false "enabled": false
"accelerator": #KeyStroke0 "accelerator": #KeyStroke0
"mnemonic": 83
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 0 2" "value": "cell 0 2"
} ) } )
@@ -154,6 +164,7 @@ new FormModel {
"text": "disabled" "text": "disabled"
"enabled": false "enabled": false
"accelerator": #KeyStroke0 "accelerator": #KeyStroke0
"mnemonic": 76
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 0 3" "value": "cell 0 3"
} ) } )