【问题标题】:Java KeyEvents for a KeyPad component键盘组件的 Java KeyEvents
【发布时间】:2011-03-27 02:47:57
【问题描述】:

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

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

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

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

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

提前致谢!

布伦特

【问题讨论】:

  • 添加一些代码,在其中添加 KeyListener 并为按钮操作侦听器引发 KeyEvent。

标签: java swing keylistener


【解决方案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);
  }
}

【讨论】:

    【解决方案2】:

    我正在编写一个 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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-01
      • 2012-03-30
      相关资源
      最近更新 更多