下面列出了javax.swing.KeyStroke#getModifiers ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
private static String getKeyBindingAcceleratorText(JButton button, KeyStroke keyStroke) {
if (keyStroke == null) {
return null;
}
// This code is based on that of BasicMenuItemUI
StringBuilder builder = new StringBuilder();
int modifiers = keyStroke.getModifiers();
if (modifiers > 0) {
builder.append(InputEvent.getModifiersExText(modifiers));
// The Aqua LaF does not use the '+' symbol between modifiers
if (!DockingWindowsLookAndFeelUtils.isUsingAquaUI(button.getUI())) {
builder.append('+');
}
}
int keyCode = keyStroke.getKeyCode();
if (keyCode != 0) {
builder.append(KeyEvent.getKeyText(keyCode));
}
else {
builder.append(keyStroke.getKeyChar());
}
return builder.toString();
}
/**
* Simulates a user initiated keystroke using the keybinding of the given action
*
* @param destination the component for the action being executed
* @param action The action to simulate pressing
*/
public static void triggerActionKey(Component destination, DockingActionIf action) {
Objects.requireNonNull(destination);
KeyStroke keyStroke = action.getKeyBinding();
if (keyStroke == null) {
throw new IllegalArgumentException("No KeyStroke assigned for the given action");
}
int modifiers = keyStroke.getModifiers();
int keyCode = keyStroke.getKeyCode();
char keyChar = keyStroke.getKeyChar();
boolean isDefined = Character.isDefined(keyChar);
if (!isDefined) {
keyChar = KeyEvent.VK_UNDEFINED;
}
triggerKey(destination, modifiers, keyCode, keyChar);
}
private JavaAgentKeys getOSKey() {
KeyStroke selectall = null;
InputMap inputMap = new JTextField().getInputMap();
KeyStroke[] allKeys = inputMap.allKeys();
for (KeyStroke keyStroke : allKeys) {
Object object = inputMap.get(keyStroke);
if (object.equals("select-all")) {
selectall = keyStroke;
break;
}
}
if ((selectall.getModifiers() & InputEvent.CTRL_DOWN_MASK) == InputEvent.CTRL_DOWN_MASK) {
return JavaAgentKeys.CONTROL;
}
if ((selectall.getModifiers() & InputEvent.META_DOWN_MASK) == InputEvent.META_DOWN_MASK) {
return JavaAgentKeys.META;
}
throw new RuntimeException("Which key?");
}
/** Same method as above, but works just with plain actions.
*/
private static String findKey(Action action) {
if (action == null) {
return null;
}
KeyStroke accelerator = (KeyStroke) action.getValue(Action.ACCELERATOR_KEY);
if (accelerator == null) {
return null;
}
int modifiers = accelerator.getModifiers();
String acceleratorText = ""; // NOI18N
if (modifiers > 0) {
acceleratorText = KeyEvent.getKeyModifiersText(modifiers);
acceleratorText += "+"; // NOI18N
} else if (accelerator.getKeyCode() == KeyEvent.VK_UNDEFINED) {
return ""; // NOI18N
}
acceleratorText += KeyEvent.getKeyText(accelerator.getKeyCode());
return acceleratorText;
}
private String getHelp() {
String ret = "";
TreeMap<String,String> helpText = new TreeMap<String, String>();
for (KeyStroke key : panel.getInputMap().allKeys()) {
if (key.equals(KeyStroke.getKeyStroke(KeyEvent.VK_0,0)) ||
key.equals(KeyStroke.getKeyStroke(KeyEvent.VK_1,0)) ||
key.equals(KeyStroke.getKeyStroke(KeyEvent.VK_2,0)) ||
key.equals(KeyStroke.getKeyStroke(KeyEvent.VK_3,0)) ||
key.equals(KeyStroke.getKeyStroke(KeyEvent.VK_4,0)) ||
key.equals(KeyStroke.getKeyStroke(KeyEvent.VK_5,0)) ||
key.equals(KeyStroke.getKeyStroke(KeyEvent.VK_6,0)) ||
key.equals(KeyStroke.getKeyStroke(KeyEvent.VK_7,0)) ||
key.equals(KeyStroke.getKeyStroke(KeyEvent.VK_8,0)) ||
key.equals(KeyStroke.getKeyStroke(KeyEvent.VK_9,0)) ||
key.equals(KeyStroke.getKeyStroke(KeyEvent.VK_MINUS,0)) ||
key.equals(KeyStroke.getKeyStroke(KeyEvent.VK_COMMA,0)))
continue;
if (key.getModifiers() != 0) helpText.put(key.toString().replaceAll("pressed ", "").replaceAll(" ", "-"), panel.getInputMap().get(key).toString());
else helpText.put(key.toString().replaceAll("pressed ", ""), panel.getInputMap().get(key).toString());
}
for (Entry<String,String> en : helpText.entrySet()) {
ret += en.getKey() + ": " + en.getValue() + "\n";
}
return ret;
}
protected String getTextForAccelerator( KeyStroke accelerator ) {
StringBuilder buf = new StringBuilder();
int modifiers = accelerator.getModifiers();
if( modifiers != 0 )
buf.append( InputEvent.getModifiersExText( modifiers ) ).append( acceleratorDelimiter );
int keyCode = accelerator.getKeyCode();
if( keyCode != 0 )
buf.append( KeyEvent.getKeyText( keyCode ) );
else
buf.append( accelerator.getKeyChar() );
return buf.toString();
}
public String getCharSequence(String keys) {
StringBuilder sb = new StringBuilder();
if (keys.length() == 1) {
sb.append(keys);
} else {
KeyStrokeParser ksp = new KeyStrokeParser(keys);
KeyStroke ks = ksp.getKeyStroke();
CharSequence keys2 = keyMapping.get(ks.getKeyCode());
if (keys2 == null) {
String keysText = KeyEvent.getKeyText(ks.getKeyCode());
if (keysText.length() == 1 && Character.isUpperCase(keysText.charAt(0))) {
keysText = keysText.toLowerCase();
}
keys2 = keysText;
}
int modifiers = ks.getModifiers();
if ((modifiers & InputEvent.SHIFT_DOWN_MASK) != 0) {
sb.append(Keys.SHIFT);
}
if ((modifiers & InputEvent.CTRL_DOWN_MASK) != 0) {
sb.append(Keys.CONTROL);
}
if ((modifiers & InputEvent.META_DOWN_MASK) != 0) {
sb.append(Keys.META);
}
if ((modifiers & InputEvent.ALT_DOWN_MASK) != 0) {
sb.append(Keys.ALT);
}
sb.append(keys2);
}
return sb.toString();
}
private static CharSequence getKeys(String keysFor, String sKeyStroke) {
KeyStroke ks = KeyStroke.getKeyStroke(sKeyStroke);
if (ks == null) {
throw new WebDriverException("Unable to parse keystroke for " + keysFor + " trying to parse " + sKeyStroke);
}
StringBuilder sb = new StringBuilder();
int modifiers = ks.getModifiers();
if ((modifiers & InputEvent.CTRL_DOWN_MASK) == InputEvent.CTRL_DOWN_MASK) {
sb.append(Keys.CONTROL);
}
if ((modifiers & InputEvent.ALT_DOWN_MASK) == InputEvent.ALT_DOWN_MASK) {
sb.append(Keys.ALT);
}
if ((modifiers & InputEvent.META_DOWN_MASK) == InputEvent.META_DOWN_MASK) {
sb.append(Keys.META);
}
if ((modifiers & InputEvent.SHIFT_DOWN_MASK) == InputEvent.SHIFT_DOWN_MASK) {
sb.append(Keys.SHIFT);
}
int keyCode = ks.getKeyCode();
if (keyCode == KeyEvent.VK_UNDEFINED) {
sb.append(ks.getKeyChar());
} else {
sb.append(keyCharFromKeyCode(keyCode, keysFor));
}
sb.append(Keys.NULL);
return sb.toString();
}
/**
* Returns a nice string representation of the specified key stroke.
* <p>
* For example returns <code>" (Ctrl+P)"</code> for the keystroke of CTRL+P.
* </p>
*
* @param keyStroke key stroke whose nice string representation to return
* @return a nice string representation of the specified key stroke
*/
public static String keyStrokeToString( final KeyStroke keyStroke ) {
final StringBuilder sb = new StringBuilder( " (" );
if ( keyStroke.getModifiers() != 0 )
sb.append( KeyEvent.getKeyModifiersText( keyStroke.getModifiers() ) ).append( '+' );
sb.append( KeyEvent.getKeyText( keyStroke.getKeyCode() ) ).append( ')' );
return sb.toString();
}
/**
* Get human-readable name for a {@link KeyStroke}.
*/
public static String getKeyStrokeAsText(@NonNull KeyStroke keyStroke) {
int modifiers = keyStroke.getModifiers ();
StringBuilder sb = new StringBuilder ();
if ((modifiers & InputEvent.CTRL_DOWN_MASK) > 0) {
sb.append(EMACS_CTRL);
}
if ((modifiers & InputEvent.ALT_DOWN_MASK) > 0) {
sb.append(STRING_ALT);
}
if ((modifiers & InputEvent.SHIFT_DOWN_MASK) > 0) {
sb.append (EMACS_SHIFT);
}
if ((modifiers & InputEvent.META_DOWN_MASK) > 0) {
sb.append(STRING_META);
}
if (keyStroke.getKeyCode () != KeyEvent.VK_SHIFT &&
keyStroke.getKeyCode () != KeyEvent.VK_CONTROL &&
keyStroke.getKeyCode () != KeyEvent.VK_META &&
keyStroke.getKeyCode () != KeyEvent.VK_ALT &&
keyStroke.getKeyCode () != KeyEvent.VK_ALT_GRAPH) {
sb.append (Utilities.keyToString (
KeyStroke.getKeyStroke (keyStroke.getKeyCode (), 0)
));
}
return sb.toString ();
}
public static String keyAcceleratorString(KeyStroke keyStroke) {
if (keyStroke == null || NO_KEYSTROKE.equals(keyStroke)) return null;
String keyText = KeyEvent.getKeyText(keyStroke.getKeyCode());
int modifiers = keyStroke.getModifiers();
if (modifiers == 0) return keyText;
if (ACC_DELIMITER == null) {
ACC_DELIMITER = UIManager.getString("MenuItem.acceleratorDelimiter"); // NOI18N
if (ACC_DELIMITER == null) ACC_DELIMITER = "+"; // NOI18N // Note: NetBeans default, Swing uses '-' by default
}
return KeyEvent.getKeyModifiersText(modifiers) + ACC_DELIMITER + keyText;
}
public void eventDispatched(AWTEvent event) {
if (!(event instanceof KeyEvent)) return;
KeyStroke eventKeyStroke = KeyStroke.getKeyStrokeForEvent((KeyEvent)event);
if (acceleratorKeyStroke == null || eventKeyStroke == null) return;
int acceleratorModifiers = acceleratorKeyStroke.getModifiers();
if (acceleratorModifiers == 0) return;
if (acceleratorModifiers != eventKeyStroke.getModifiers()) modifierKeyStateChanged();
}
public final void setShortDescription(String shortDescription) {
StringBuilder sb = new StringBuilder();
sb.append(shortDescription);
KeyStroke accelerator = (KeyStroke) getValue(ACCELERATOR_KEY);
if (accelerator != null) {
sb.append(" (");
if ((accelerator.getModifiers() & InputEvent.CTRL_DOWN_MASK) != 0) {
sb.append("Ctrl+");
}
if ((accelerator.getModifiers() & InputEvent.META_DOWN_MASK) != 0) {
sb.append("⌘+");
}
if ((accelerator.getModifiers() & InputEvent.ALT_DOWN_MASK) != 0) {
sb.append("Alt+");
}
if ((accelerator.getModifiers() & InputEvent.ALT_GRAPH_DOWN_MASK) != 0) {
sb.append("AltGr+");
}
if ((accelerator.getModifiers() & InputEvent.SHIFT_DOWN_MASK) != 0) {
sb.append("Shift+");
}
int keyCode = accelerator.getKeyCode();
if (keyCode == KeyEvent.VK_ADD) {
sb.append('+');
} else if (keyCode == KeyEvent.VK_SUBTRACT) {
sb.append('-');
} else {
sb.append((char) keyCode);
}
sb.append(')');
}
putValue(SHORT_DESCRIPTION, sb.toString());
}
/**
* Removes the given {@code KeyStroke}. That is:
* This action's {@code KeyStroke} is set to
* {@code null} if it is the same as the given
* {@code KeyStroke}.
*
* @param k The {@code KeyStroke} to be removed.
*/
public void removeKeyStroke(KeyStroke k) {
if (k != null && keyStroke != null
&& k.getKeyCode() == keyStroke.getKeyCode()
&& k.getModifiers() == keyStroke.getModifiers()) {
keyStroke = null;
bl.setText(" ");
}
}
public static String keyStroke2String(KeyStroke key) {
StringBuilder s = new StringBuilder(50);
int m = key.getModifiers();
if ((m & (InputEvent.SHIFT_DOWN_MASK | InputEvent.SHIFT_MASK)) != 0) {
s.append("shift ");
}
if ((m & (InputEvent.CTRL_DOWN_MASK | InputEvent.CTRL_MASK)) != 0) {
s.append("ctrl ");
}
if ((m & (InputEvent.META_DOWN_MASK | InputEvent.META_MASK)) != 0) {
s.append("meta ");
}
if ((m & (InputEvent.ALT_DOWN_MASK | InputEvent.ALT_MASK)) != 0) {
s.append("alt ");
}
if ((m & (InputEvent.BUTTON1_DOWN_MASK | InputEvent.BUTTON1_MASK)) != 0) {
s.append("button1 ");
}
if ((m & (InputEvent.BUTTON2_DOWN_MASK | InputEvent.BUTTON2_MASK)) != 0) {
s.append("button2 ");
}
if ((m & (InputEvent.BUTTON3_DOWN_MASK | InputEvent.BUTTON3_MASK)) != 0) {
s.append("button3 ");
}
switch (key.getKeyEventType()) {
case KeyEvent.KEY_TYPED:
s.append("typed ");
s.append(key.getKeyChar()).append(" ");
break;
case KeyEvent.KEY_PRESSED:
s.append("pressed ");
s.append(getKeyText(key.getKeyCode())).append(" ");
break;
case KeyEvent.KEY_RELEASED:
s.append("released ");
s.append(getKeyText(key.getKeyCode())).append(" ");
break;
default:
s.append("unknown-event-type ");
break;
}
return s.toString();
}
@Override
public void actionPerformed(ActionEvent evt) {
boolean editors = true;
boolean views = !documentsOnly;
if( "immediately".equals( evt.getActionCommand() ) ) {
TopComponent activeTc = TopComponent.getRegistry().getActivated();
if( null != activeTc ) {
if( TopComponentTracker.getDefault().isEditorTopComponent( activeTc ) ) {
//switching in a document, go to some other document
views = false;
} else {
//switching in a view, go to some other view
editors = false;
views = true;
}
}
}
TopComponent[] documents = getRecentWindows(editors, views);
if (documents.length < 2) {
return;
}
if(!"immediately".equals(evt.getActionCommand()) && // NOI18N
!(evt.getSource() instanceof javax.swing.JMenuItem)) {
// #46800: fetch key directly from action command
KeyStroke keyStroke = Utilities.stringToKey(evt.getActionCommand());
if(keyStroke != null) {
int triggerKey = keyStroke.getKeyCode();
int reverseKey = KeyEvent.VK_SHIFT;
int releaseKey = 0;
int modifiers = keyStroke.getModifiers();
if((InputEvent.CTRL_MASK & modifiers) != 0) {
releaseKey = KeyEvent.VK_CONTROL;
} else if((InputEvent.ALT_MASK & modifiers) != 0) {
releaseKey = KeyEvent.VK_ALT;
} else if((InputEvent.META_MASK & modifiers) != 0) {
releaseKey = KeyEvent.VK_META;
}
if(releaseKey != 0) {
if (!KeyboardPopupSwitcher.isShown()) {
KeyboardPopupSwitcher.showPopup(documentsOnly, releaseKey, triggerKey, (evt.getModifiers() & KeyEvent.SHIFT_MASK) == 0);
}
return;
}
}
}
int documentIndex = (evt.getModifiers() & KeyEvent.SHIFT_MASK) == 0 ? 1 : documents.length-1;
TopComponent tc = documents[documentIndex];
// #37226 Unmaximized the other mode if needed.
WindowManagerImpl wm = WindowManagerImpl.getInstance();
ModeImpl mode = (ModeImpl) wm.findMode(tc);
if(mode != null && mode != wm.getCurrentMaximizedMode()) {
wm.switchMaximizedMode(null);
}
tc.requestActive();
}
@Override
public void onNonConsumedKeyEvent(@Nonnull final MindMapPanel source, @Nonnull final KeyEvent e, @Nonnull final KeyEventType type) {
if (type == KeyEventType.PRESSED) {
if (e.getModifiers() == 0) {
switch (e.getKeyCode()) {
case KeyEvent.VK_UP:
case KeyEvent.VK_LEFT:
case KeyEvent.VK_RIGHT:
case KeyEvent.VK_DOWN: {
e.consume();
}
break;
}
}
}
boolean activated = false;
final ShortcutSet findAtMindMap = getFindAtMindMapShortcutSet();
if (findAtMindMap != null) {
final KeyStroke eventStroke = KeyStroke.getKeyStrokeForEvent(e);
for (final Shortcut c : findAtMindMap.getShortcuts()) {
if (c instanceof KeyboardShortcut) {
final KeyboardShortcut keyboardShortcut = (KeyboardShortcut) c;
final KeyStroke firstKeyStroke = keyboardShortcut.getFirstKeyStroke();
final KeyStroke secondKeyStroke = keyboardShortcut.getSecondKeyStroke();
if (firstKeyStroke != null && firstKeyStroke.getModifiers() == eventStroke.getModifiers() && firstKeyStroke.getKeyCode() == eventStroke.getKeyCode() && firstKeyStroke.getKeyChar() == eventStroke.getKeyChar()) {
activated = true;
break;
}
if (secondKeyStroke != null && secondKeyStroke.getModifiers() == eventStroke.getModifiers() && secondKeyStroke.getKeyCode() == eventStroke.getKeyCode() && secondKeyStroke.getKeyChar() == eventStroke.getKeyChar()) {
activated = true;
break;
}
}
}
}
if (activated) {
e.consume();
activateTextSearchPanel();
}
if (!e.isConsumed() && e.getModifiers() == 0 && e.getKeyCode() == KeyEvent.VK_ESCAPE) {
ApplicationManager.getApplication().invokeLater(new Runnable() {
@Override
public void run() {
findTextPanel.deactivate();
}
});
}
}
public static String keyStroke2String(KeyStroke key) {
StringBuilder s = new StringBuilder(50);
int m = key.getModifiers();
if ((m & (InputEvent.SHIFT_DOWN_MASK | InputEvent.SHIFT_MASK)) != 0) {
s.append("shift ");
}
if ((m & (InputEvent.CTRL_DOWN_MASK | InputEvent.CTRL_MASK)) != 0) {
s.append("ctrl ");
}
if ((m & (InputEvent.META_DOWN_MASK | InputEvent.META_MASK)) != 0) {
s.append("meta ");
}
if ((m & (InputEvent.ALT_DOWN_MASK | InputEvent.ALT_MASK)) != 0) {
s.append("alt ");
}
if ((m & (InputEvent.BUTTON1_DOWN_MASK | InputEvent.BUTTON1_MASK)) != 0) {
s.append("button1 ");
}
if ((m & (InputEvent.BUTTON2_DOWN_MASK | InputEvent.BUTTON2_MASK)) != 0) {
s.append("button2 ");
}
if ((m & (InputEvent.BUTTON3_DOWN_MASK | InputEvent.BUTTON3_MASK)) != 0) {
s.append("button3 ");
}
switch (key.getKeyEventType()) {
case KeyEvent.KEY_TYPED:
s.append("typed ");
s.append(key.getKeyChar()).append(" ");
break;
case KeyEvent.KEY_PRESSED:
s.append("pressed ");
s.append(getKeyText(key.getKeyCode())).append(" ");
break;
case KeyEvent.KEY_RELEASED:
s.append("released ");
s.append(getKeyText(key.getKeyCode())).append(" ");
break;
default:
s.append("unknown-event-type ");
break;
}
return s.toString();
}
@Override
public void actionPerformed(ActionEvent evt) {
List<DVThread> threads = getThreads();
int threadsCount = threads.size();
if (threadsCount < 1) {
Toolkit.getDefaultToolkit().beep();
return;
}
if(!"immediately".equals(evt.getActionCommand()) && // NOI18N
!(evt.getSource() instanceof javax.swing.JMenuItem)) {
// #46800: fetch key directly from action command
KeyStroke keyStroke = Utilities.stringToKey(evt.getActionCommand());
if(keyStroke != null) {
int triggerKey = keyStroke.getKeyCode();
int releaseKey = 0;
int modifiers = keyStroke.getModifiers();
if((InputEvent.CTRL_MASK & modifiers) != 0) {
releaseKey = KeyEvent.VK_CONTROL;
} else if((InputEvent.ALT_MASK & modifiers) != 0) {
releaseKey = KeyEvent.VK_ALT;
} else if((InputEvent.META_MASK & modifiers) != 0) {
releaseKey = InputEvent.META_MASK;
}
if(releaseKey != 0) {
if (!KeyboardPopupSwitcher.isShown()) {
KeyboardPopupSwitcher.selectItem(
createSwitcherItems(threads),
releaseKey, triggerKey, true, true); // (evt.getModifiers() & KeyEvent.SHIFT_MASK) == 0
}
return;
}
}
}
if (threadsCount == 1) {
threads.get(0).makeCurrent();
} else {
int index = (evt.getModifiers() & KeyEvent.SHIFT_MASK) == 0 ? 1 : threadsCount - 1;
threads.get(index).makeCurrent();
}
}
/**
* Fires a {@link KeyListener#keyPressed(KeyEvent)},
* {@link KeyListener#keyTyped(KeyEvent)}
* and {@link KeyListener#keyReleased(KeyEvent)} for the given key stroke
*
* @param c the destination component
* @param ks the key stroke
*/
public static void triggerKey(Component c, KeyStroke ks) {
int modifiers = ks.getModifiers();
char keyChar = ks.getKeyChar();
int keyCode = ks.getKeyCode();
triggerKey(c, modifiers, keyCode, keyChar);
}