Проверьте мой код.Здесь все в порядке.
Этот пример не подходит к проблеме, но я дал ее в первую очередь (и был недоволен), поэтому он оставлен здесь для справки.Для соответствующего, то есть установки акселератора в пункте меню, см. EDIT1 ниже.
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class CtrlGreaterTestInaccurateAnswer extends JFrame
{
private static final long serialVersionUID = 1L;
private KeyListener kL = new KeyAdapter()
{
@Override
public void keyReleased(KeyEvent e)
{
super.keyReleased(e);
System.out.println("keyReleased KeyEvent.VK_GREATER=" + KeyEvent.VK_GREATER
+ "; e.getKeyCode()=" + e.getKeyCode()
+ "; e.getKeyChar()=" + e.getKeyChar()
+ "; e.isControlDown()=" + e.isControlDown()
+ "; e.isShiftDown()=" + e.isShiftDown()
+ "; (int)'.'="+(int)'.' +"; (int)'>'="+(int)'>');
if(e.isControlDown() && e.getKeyChar() == '>')
System.out.println("keyReleased ctrl + greater");
}
};
public CtrlGreaterTestInaccurateAnswer()
{
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
addKeyListener(kL);
}
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
CtrlGreaterTestInaccurateAnswer f = new CtrlGreaterTestInaccurateAnswer();
f.setSize(400, 400);
f.setVisible(true);
}
});
}
}
Из того, что я наблюдал, KeyEvent.VK_GREATER возвращает 160, и код возвращается при нажатии «>»46, то есть то же самое, что нажатие «.».Таким образом, если вы используете метод getKeyCode для обнаружения, у вас возникнет проблема:
EDIT1 (соответствующий пример): Установка ускорителя для CTRL +>.Обратите внимание, что по-прежнему ускоритель скажет Ctrl + Shift-PERIOD (Ctrl + Shift +.)
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.AbstractAction;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;
public class CtrlGreaterTest extends JFrame
{
private static final long serialVersionUID = 1L;
public CtrlGreaterTest()
{
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JMenuBar menuBar = new JMenuBar();
JMenu menu1 = new JMenu("Menu1");
JMenuItem menuItem1 = new JMenuItem();
menuItem1.setAction(onCtrlGreaterAction);
menuItem1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_PERIOD,
KeyEvent.CTRL_MASK | KeyEvent.SHIFT_MASK));
//or use this
//menuItem1.setAccelerator(KeyStroke.getKeyStroke("ctrl shift PERIOD"));
menu1.add(menuItem1);
JMenuItem menuItem2 = new JMenuItem();
menuItem2.setAction(onCtrlAAction);
menuItem2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,
KeyEvent.CTRL_MASK));
System.out.println("KeyEvent.VK_PERIOD| KeyEvent.SHIFT_MASK="
+(KeyEvent.VK_PERIOD| KeyEvent.SHIFT_MASK)
+ "; KeyEvent.VK_GREATER="+(KeyEvent.VK_GREATER)
+ "; (int)'>'="+(int)'>');
menu1.add(menuItem2);
menuBar.add(menu1);
setJMenuBar(menuBar);
}
private AbstractAction onCtrlGreaterAction = new AbstractAction("CTRL + > Action")
{
private static final long serialVersionUID = 1L;
@Override
public void actionPerformed(ActionEvent e)
{
System.out.println("onCtrlGreaterAction actionPerformed OI");
}
};
private AbstractAction onCtrlAAction = new AbstractAction("CTRL + a Action")
{
private static final long serialVersionUID = 1L;
@Override
public void actionPerformed(ActionEvent e)
{
System.out.println("onCtrlAAction actionPerformed AI");
}
};
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
CtrlGreaterTest f = new CtrlGreaterTest();
f.setSize(400, 400);
f.setVisible(true);
}
});
}
}
Надеюсь, что это так:)