gpt4 book ai didi

java - 使用屏幕键盘在 Java 中制作记事本,无法将其正确链接到文本区域

转载 作者:行者123 更新时间:2023-11-29 07:44:41 25 4
gpt4 key购买 nike

首先,感谢您花时间阅读本文。这就是我想要做的:

  • 具有多个选项的文本编辑器。
  • 一个虚拟键盘按钮。我已经成功创建了按钮,也成功添加了所有按钮,但是我无法将每个按钮链接到我的文本区域并使每个按钮按下都起作用。
  • 正如您将从所提供的屏幕截图中看到的那样,无需寻找任何复杂的东西,应用程序的所有其他方面也都可以正常工作。
  • 这是与我的键盘相关的代码。

class KbListener implements ActionListener //kb function.
{
public void actionPerformed(ActionEvent e) //checking events.
{
keyboard = new JFrame("VK");
keyboard.setSize(400,300);//setting initial size of app.
keyboard.setVisible(true);//making sure its active.
keyboard.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);//closes when the x is pressed.
JButton[] letter = new JButton[27];
keyboard.setLayout(new GridLayout(3,9));

for (int i = 0;i<27;i++)
{

letter[i] = new JButton(""+(char)('A'+ i));

keyboard.add(letter[i]);
//up until this point all is fine.
letter[i].addActionListener = (new ActionListener());


if(e.getSource() ==letter[A])
textArea.append("A");



}

}


}

enter image description here

最佳答案

您需要创建一个在按钮中使用并在其监听器中使用的字符串,例如,

  for (int i = 0; i < 27; i++) {

final String buttonText = String.valueOf((char) ('A' + i));
letter[i] = new JButton(buttonText);

keyboard.add(letter[i]);
letter[i].addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
textArea.append(buttonText);
}
});

}

请注意,buttonText 必须是最终的,以便它可以在匿名内部 ActionListener 类中访问。

另外,请考虑避免魔数(Magic Number)。例如,你可以这样做

for (int i = 0; i <= (int)('Z' - 'A'); i++) {

  int i = 0;
for (char myChar = 'A'; myChar <= 'Z'; myChar++) {
final String btnText = String.valueOf(myChar);
letter[i] = new JButton(btnText);

keyboard.add(letter[i]);
letter[i].addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
textArea.append(btnText);
}
});
i++;
}

编辑
另一种可能更好的方法是使用 Actions 而不是 ActionListeners。例如,...

   //....
int i = 0;
for (char myChar = 'A'; myChar <= 'Z'; myChar++) {
final String btnText = String.valueOf(myChar);
MyKeyBoardAction action = new MyKeyBoardAction(btnText);
letter[i] = new JButton(action);
i++;
}
}

private class MyKeyBoardAction extends AbstractAction {
public MyKeyBoardAction(String name) {
super(name);
}

@Override
public void actionPerformed(ActionEvent e) {
textArea.append(getValue(NAME).toString());
}
}

你还问了空格符,

do u know how to add a space to the code as well?

这不适用于您的 for 循环,但可以单独添加。

此外,

but why avoid the numbers?

因为如果您使用本质上没有意义的“神奇”数字,修复错误很容易变得困难。此外,通过使用常量、变量而不是硬编码数字,您的变量可以使您的代码 self 注释。

关于java - 使用屏幕键盘在 Java 中制作记事本,无法将其正确链接到文本区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26820102/

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