0

我正在开发一个桌面应用程序。在这个应用程序中,我必须使用虚拟键盘/数字键盘进行登录操作等。

我创建了一个这样的jframe: 在此处输入图像描述

和按钮的创建代码是

numberButtons = new JButton[10];
    for(int i = 0; i < numberButtons.length; i++ ) {
        numberButtons[i] = new JButton(String.valueOf(i));
    numberButtons[i].setFont(new java.awt.Font("Open Sans", 0, 14));
    numberButtons[i].setPreferredSize(new java.awt.Dimension(100, 50));

    numberButtons[i].addActionListener(new ActionListener()
    {
        public void actionPerformed(java.awt.event.ActionEvent evt)
        {
            numberButtonActionPerformed(evt);
        }
    });
        numberPanel.add(numberButtons[i]);
    }

动作方法是:

private void numberButtonActionPerformed(ActionEvent evt) {

    String currentPassword = ((JButton) evt.getSource()).getText();

    passwordField.requestFocus();
    passwordField.setText(passwordField.getText() + currentPassword);
    if (Arrays.equals(pass, passwordField.getPassword())) {
        System.out.println("Correct");
    }
}

但是 jpasswordfield 的 gettext 方法被调度。不建议使用。我有另一个想法为每个按钮编写 actionperformed 方法并在每个按钮的操作中使用“KeyEvent.VK_”。但是,我认为这不是正确的方法。你会推荐什么?

4

3 回答 3

0

但是 jpasswordfield 的 gettext 方法被调度

不要使用 setText(...) 来重置整个文本。

相反,只需将键入的字符添加到文本组件的末尾即可。一种方法是使用replaceSelection(...)文本组件的方法。

查看:将单个动作侦听器附加到所有按钮以获取工作示例。请注意,该示例将允许您键入字符或单击按钮。

于 2017-02-13T15:34:48.730 回答
0

你已经用过passwordField.getPassword()。这是执行此操作的正确方法。文档说getText已被替换为getPasswordhttps://docs.oracle.com/javase/7/docs/api/javax/swing/JPasswordField.html#getText()

要从返回的字符串构造一个字符串,请char[]使用构造函数。

于 2017-02-13T10:25:37.223 回答
0

创建一个封装了 JButton 的按钮类、侦听器的创建以及任何其他有用的功能。然后使用该类代替按钮创建代码。

于 2017-02-13T10:27:52.980 回答