我的问题实际上更为笼统,但我正在使用用户按住“Alt”键的操作,并按“+”作为显示困难的示例。
我正在使用一个美国英语键盘,它在同一个键上有“=”(小写)和“+”(大写),所以要按“Alt +”(如菜单项中所示) ),我必须按“Alt Shift =”。在Java AWT中,按“Alt Shift =”会生成一个按键的KeyEvent,其键码与“=”键相关联,键生成的KeyEvent包含“±”字符。因此,没有明显可靠的方式以编程方式决定在按下“+”键的同时按下“Alt”。
我可以在内部进行一些映射来修复此问题,例如将“±”映射到“Alt +”,或将“Shift {keycode for =}”映射到“+”。但是,似乎没有任何保证可以在不同的键盘布局中工作;它肯定不是很好的编码风格。
如果有人可以提出解决这些问题的方法,或者可能指出已经处理过这个问题的代码,我会非常感激。
感谢。
答案 0 :(得分:1)
试试这个:
if(e.isAltDown())
{
switch(e.getKeyChar())
{
case '+':
System.out.println("Plus");
break;
}
}
e
位于KeyEvent
,并以keyPressed
方式处理。
当您在指定的键盘上按 ALT + Shift + = 时,上面的代码将打印加号你。
有关完整的工作代码,请参阅以下示例:
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.UIManager;
public class SwingTest
{
private static JFrame frame;
public static void main(String[] args) throws Exception
{
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
try {
UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
} catch (Exception ex) {
ex.printStackTrace();
}
}
frame = new JFrame("Event Test");
Toolkit tk = Toolkit.getDefaultToolkit();
int xSize = ((int) tk.getScreenSize().getWidth()/2) + 100;
int ySize = ((int) tk.getScreenSize().getHeight()/2) + 50;
frame.setSize(xSize,ySize);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.addKeyListener(new KeyListener()
{
public void keyTyped(KeyEvent e) {
}
public void keyReleased(KeyEvent e) {
}
public void keyPressed(KeyEvent e)
{
if(e.isAltDown())
{
switch(e.getKeyChar())
{
case '+':
System.out.println("Plus");
break;
}
}
}
});
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
frame.setVisible(true);
}
});
}
}
希望这会有所帮助。