将新的“字符”重新分配给键,以便打印而不是键的默认字母

时间:2011-01-18 23:22:25

标签: java swing jtextpane keymapping

我正在开发一个具有“宏系统”的文本编辑器,用户可以将值重新分配给键盘上的键 - 这样当他们按下字母a时,它可能会打印出来的字母而是“z”。 (实际上,它将用于数学符号,而不是其他字母)。

任何人都可以让我开始使用Java代码将值重新分配给JTextPane中的键吗?

如果您需要更多详情,请与我们联系。

谢谢!


到目前为止,这就是我所拥有的:

public void keyPressed(KeyEvent evt) {
//Called when a key is pressed.

//Intercept the key before the default value is printed.
//1. Suppress the original character. Do this in the KeyEvent object
//by setting the doit property to false in your listener if the key
//matches a macro.

    jTextPane1.addKeyListener(new KeyAdapter() {
public void keyPressed(keyEvent event) {
if (event.getKeyCode() == KeyEvent.VK_A) {
//Perform an action when A is pressed and there is a macro.
if(macroA == true)
{
    keyPressed.doit() = false;
}
}
}
else if (event.getKeyCode() == KeyEvent.VK_B) {
//Perform an action when B is pressed if there is a macro.
if(macroB == true)
{
    keyPressed.doit() = false;
}
}
}
});

我正在研究如何通过“创建”宏来实现它,检查宏是否存在。

如果您有任何建议,我将不胜感激。

谢谢。

2 个答案:

答案 0 :(得分:3)

我有一段时间没有做任何Swing开发,但我认为你正在寻找KeyListener。 这里有一个例子:http://download.oracle.com/javase/tutorial/uiswing/events/keylistener.html

您的后端需要使用宏映射键输入并截取键输入并插入宏。

答案 1 :(得分:2)

如果您想更改文本窗格中显示的字符,那么您有两个选项(我能想到)

a)重写显示文本窗格中文本的代码 b)在文档中插入一个不同的字符,以便字符被绘制

选项二是更容易的方法。

对于简单的一对一键映射,您只需使用DocumentFilter。

对于更复杂的键映射,例如使用Ctrl + 1,输入一个特殊字符,然后使用KeyBindings。

Swing tutorial有关于这两种方法的部分。请参阅“文本组件功能”和“使用键绑定”。