gpt4 book ai didi

java - 如何在 Java Swing 中为特殊键定义快捷方式,例如德语变音键 Ä?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:21:23 25 4
gpt4 key购买 nike

如何为顶级特殊键(如德语变音键 Ä)定义键盘快捷键?我找到了一种映射用于默认美国布局键的 unicode 字母的方法,请参阅 here .但是德语变音键 Ä 的关键事件是:

java.awt.event.KeyEvent[KEY_PRESSED,keyCode=0,keyText=Unknown keyCode: 0x0,keyChar='ä',keyLocation=KEY_LOCATION_STANDARD,rawCode=222,primaryLevelUnicode=228,scancode=40] on frame0 

想法是注册一个键盘 Action :

import java.awt.Dimension;
import java.awt.event.ActionEvent;

import javax.swing.AbstractAction;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;


public class KeyStrokeForGermanUmlaut {

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame frame = new JFrame();
frame.setPreferredSize(new Dimension(600, 400));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JPanel panel = new JPanel();
final JLabel label = new JLabel("Text shall change with shortcut");
panel.add(label);
panel.registerKeyboardAction(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent event) {
label.setText("It is working!!!");
}
}, KeyStroke.getKeyStroke("control typed Ä"), JComponent.WHEN_IN_FOCUSED_WINDOW);

frame.getContentPane().add(panel);
frame.pack();
frame.setVisible(true);
}
});
}
}

最佳答案

  • 你可以用 JLabel 变戏法,KeyEvents 没有任何反应

  • 应该以将焦点移动到 JFrames ContentPane 为起点(可以用作 JPanel,但与普通 JPanel - FlowLayout 相比具有 BorderLayout)

-

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;

public class KeyStrokeForGermanUmlaut {

private JFrame frame = new JFrame();
private JLabel label = new JLabel("Text shall change with shortcut");

public KeyStrokeForGermanUmlaut() {
frame.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
KeyStroke.getKeyStroke(KeyEvent.VK_A, KeyEvent.CTRL_MASK), "CTRL + A");
frame.getRootPane().getActionMap().put("CTRL + A", updateCol());
frame.setPreferredSize(new Dimension(600, 100));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(label);
frame.pack();
frame.setLocation(150, 150);
frame.setVisible(true);
}

private Action updateCol() {
return new AbstractAction("Hello World") {
private static final long serialVersionUID = 1L;

@Override
public void actionPerformed(ActionEvent e) {
label.setText(label.getText() + " presses");
}
};
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new KeyStrokeForGermanUmlaut();
}
});
}
}

.

.


EDIT 请参阅 API 中的说明 getKeyStroke/ v.s. getKeyStrokeForEvent

那么结果可能是(何时以及如何对这两个字符使用大写形式的修饰符 SHIFT(ä 和 ú)有点丢失,也许有人会帮助我们处理这些 KeyEvents)

enter image description here

来自

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;

public class KeyStrokeForGermanUmlaut {

private JFrame frame = new JFrame();
private JLabel label = new JLabel("Text shall change with shortcut");

public KeyStrokeForGermanUmlaut() {
frame.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
KeyStroke.getKeyStroke("typed ä"), "typed ä");
frame.getRootPane().getActionMap().put("typed ä", updateCol());
frame.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
KeyStroke.getKeyStroke("typed ú"), "typed ú");
frame.getRootPane().getActionMap().put("typed ú", updateCol1());
frame.setPreferredSize(new Dimension(600, 100));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(label);
frame.pack();
frame.setLocation(150, 150);
frame.setVisible(true);
}

private Action updateCol() {
return new AbstractAction("Hello World") {
private static final long serialVersionUID = 1L;

@Override
public void actionPerformed(ActionEvent e) {
label.setText(label.getText() + " presses - ä");
}
};
}

private Action updateCol1() {
return new AbstractAction("Hello World") {
private static final long serialVersionUID = 1L;

@Override
public void actionPerformed(ActionEvent e) {
label.setText(label.getText() + " presses - ú");
}
};
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new KeyStrokeForGermanUmlaut();
}
});
}
}

关于java - 如何在 Java Swing 中为特殊键定义快捷方式,例如德语变音键 Ä?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22832746/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com