Java KeyEvents для компонента KeyPad - PullRequest
0 голосов
/ 09 августа 2010

Я пишу Java-приложение, которое будет иметь экранную цифровую клавиатуру для сенсорного ввода.Нормальный ввод с клавиатуры также будет доступен, но я бы хотел, чтобы там была клавиатура для планшетов и тому подобное.Я сделал класс, который расширяет JPanel.Он имеет 10 кнопок, расположенных в обычной конфигурации клавиатуры.Сейчас я пытаюсь понять, как заставить его работать как обычная клавиатура.

Я просто не знаю, как выдавать KeyEvents.Вот что я попробовал до сих пор:

Я попытался добавить новый KeyListener.В JPanel при нажатии кнопки прослушиватель действий вызвал метод, который создал новый KeyEvent и отправил его всем KeyListener, которые были добавлены в JPanel.Однако, независимо от того, сколько раз я добавлял KeyListeners, похоже, что они не были связаны с панелью.

Еще одна вещь, которую я пытался передать, - передать целевой JTextField в JPanel и установить объект члена в JTextField,Но каждый раз, когда я пытаюсь добавить к нему текст, объект-член имеет значение null.Это действительно сбивает с толку.

Я надеюсь, что кто-то может указать мне правильное направление, как реализовать эту клавиатуру, чтобы сделать ее максимально модульной, чтобы ее можно было использовать на нескольких разных экранах.

Заранее спасибо!

Брент

Ответы [ 2 ]

1 голос
/ 09 августа 2010

Вам не нужно 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);
  }
}
0 голосов
/ 09 августа 2010

Я пишу 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);
    }
}

Если это не решит вашу проблему, то вам следует вместо * KeyEvents связывать клавиши .

...