KeyPad组件的Java KeyEvents

时间:2010-08-09 03:40:48

标签: java swing keylistener

我正在编写一个Java应用程序,它将具有可用于触摸输入的屏幕数字键盘。也可以使用普通键输入,但我喜欢那里的键盘用于平板电脑等。我做了一个扩展JPanel的课程。它有10个按钮,采用普通键盘配置。现在我想弄清楚如何让它像常规键盘一样。

我只是不知道如何发布KeyEvents。这是我到目前为止所尝试的内容:

我尝试添加一个新的KeyListener。在JPanel中,当按下按钮时,动作侦听器调用一个方法,该方法创建一个新的KeyEvent并将其发送到添加到JPanel的所有KeyListener。但是,无论我添加了多少次KeyListeners,似乎都没有与面板相关联。

我尝试的另一件事是将目标JTextField传递给JPanel并将成员对象设置为JTextField。但每次我尝试向其追加文本时,成员对象都为null。这对我来说真的很困惑。

我希望有人能指出我正确的方向,如何实现这个键盘,使其成为模块化的,因此可以在几个不同的屏幕内使用。

提前致谢!

布伦特

2 个答案:

答案 0 :(得分:1)

您不需要KeyListener您可以自己关联在JTextField上按下按钮(不是键)的结果效果。

可能是这样的:

New JButton button = new JButton(new KeyPressedAction(mTextField,"0"));

其中

public class KeyPressedAction extends Action{
  JTextField tf;
  String num;
  public KeyPressedAction(JTextField textField,String num){
    this.tf = textField;
    this.num = num;
  }

  public void actionPerformed(ActionEvent e){
    textField.setText(textField.getText+num);
  }
}

答案 1 :(得分:0)

  

我正在编写一个Java应用程序   将有一个屏幕上的数字键盘   可用于触摸输入。

所以我假设当“触摸”按钮时,将生成一个ActionEvent。然后我假设你想要将与按钮相关的字符添加到文本字段中。如果是这样,那么以下示例应该可以帮助您入门。您不需要生成KeyEvents,只需响应ActionEvents:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class ButtonCalculator extends JFrame implements ActionListener
{
    private JButton[] buttons;
    private JTextField display;

    public ButtonCalculator()
    {
        display = new JTextField();
        display.setEditable( false );
        display.setHorizontalAlignment(JTextField.RIGHT);

        JPanel buttonPanel = new JPanel();
        buttonPanel.setLayout( new GridLayout(0, 5) );
        buttons = new JButton[10];

        for (int i = 0; i < buttons.length; i++)
        {
            String text = String.valueOf(i);
            JButton button = new JButton( text );
            button.addActionListener( this );
            button.setMnemonic( text.charAt(0) );
            buttons[i] = button;
            buttonPanel.add( button );
        }

        getContentPane().add(display, BorderLayout.NORTH);
        getContentPane().add(buttonPanel, BorderLayout.SOUTH);
        setResizable( false );
    }

    public void actionPerformed(ActionEvent e)
    {
        JButton source = (JButton)e.getSource();
        display.replaceSelection( source.getActionCommand() );
    }

    public static void main(String[] args)
    {
        ButtonCalculator frame = new ButtonCalculator();
        frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
        frame.pack();
        frame.setLocationRelativeTo( null );
        frame.setVisible(true);
    }
}

如果这不能解决您的问题,那么您应该调查Key Bindings而不是使用KeyEvents。