KeyStroke.getKeyStroke(int, int)
не используется, чтобы получить KeyStroke
для печати или освободить событие, оно используется для применения модификатора к KeyStroke
в виде KeyEvent.SHIFT_DOWN_MASK
и/или KeyEvent.CTRL_DOWN_MASK
и/или KeyEvent.ALT_DOWN_MASK
и/или KeyEvent.ALT_GRAPH_DOWN_MASK
и/или KeyEvent.META_DOWN_MASK
...
Вместо getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_F10, KeyEvent.KEY_PRESSED), "none");
вы должны использовать getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_F10, 0), "none");
когда я использую следующий, я могу получить ключ действия, чтобы вызвать, когда поле ориентировано ...
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.AbstractAction;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class TestTextFieldKeyStroke {
public static void main(String[] args) {
new TestTextFieldKeyStroke();
}
public TestTextFieldKeyStroke() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
public TestPane() {
JTextField field = new JTextField(20);
add(field);
JPopupMenu pop = new JPopupMenu();
field.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_F10, 0), "happy");
field.getActionMap().put("happy", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Happy");
}
});
}
}
}
Обновлены всплывающие окна
Я до сих пор не хватает что-то здесь, основываясь на предыдущем примере, если я что-то вроде ...
final JTextField field = new JTextField(20);
add(field);
JPopupMenu pop = new JPopupMenu();
pop.add(new JLabel("Hello"));
field.setComponentPopupMenu(pop);
field.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_F10, 0), "happy");
field.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_F10, KeyEvent.CTRL_DOWN_MASK), "happy");
field.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_F10, KeyEvent.ALT_DOWN_MASK), "happy");
field.getActionMap().put("happy", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
JPopupMenu popup = field.getComponentPopupMenu();
popup.show(field, 0, field.getHeight());
}
});
я могу получить его, чтобы показать JPopupMenu
, что именно вы имеете в виду под _but F10 не работает correctly_ - это показывает всплывающее окно, как и следовало ожидать (по крайней мере в выигрыш, не знаю других ОС), так что _do_ вы ожидаете? – kleopatra
Мое всплывающее окно просто JWindow, и если используется F10 - очень странное поведение - всплывающие кнопки иногда не получают MouseEvents (они должны исчезать в/из).И еще одно - когда я нажимаю F10, когда мышь над JTextField - поле потеряно и снова попадает в фокус. –
Вы пробовали некоторые другие условия, например 'getInputMap (JComponent.WHEN_FOCUSED)'? – MadProgrammer