首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >KeyPad组件的Java KeyEvents

KeyPad组件的Java KeyEvents
EN

Stack Overflow用户
提问于 2010-08-09 11:40:48
回答 2查看 1.2K关注 0票数 0

我正在编写一个Java应用程序,它将有一个可用于触摸输入的屏幕数字键盘。普通的按键输入也是可用的,但我想要的是平板电脑之类的键盘。我制作了一个扩展JPanel的类。它在正常的键盘配置中有10个按钮。现在,我正在尝试弄清楚如何让它像普通的键盘一样工作。

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

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

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

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

提前感谢!

布伦特

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-09 12:14:05

您不需要KeyListener,您可以将按下JTextField上的按钮(不是键)的结果效果关联起来。

可能是这样的:

代码语言:javascript
复制
New JButton button = new JButton(new KeyPressedAction(mTextField,"0"));

哪里

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2010-08-09 12:11:08

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

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

代码语言:javascript
复制
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。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3437190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档