Question

J'écris une application Java qui aura un pavé numérique à l'écran tactile disponible pour entrées. entrée normale clé sera également disponible, mais je voudrais le clavier il y a pour les tablettes et autres. Je l'ai fait une classe qui étend JPanel. Il dispose de 10 boutons disposés dans la configuration du clavier normal. Maintenant, je suis en train de comprendre comment le faire agir comme un clavier régulier.

Je ne sais pas comment émettre KeyEvents. Voici ce que j'ai essayé jusqu'à présent:

J'ai essayé d'ajouter une nouvelle KeyListener. Dans le JPanel, quand un bouton a été pressé, l'auditeur d'action appelé une méthode qui a créé une nouvelle KeyEvent et envoyé à tous les KeyListeners qui ont été ajoutés à la JPanel. Cependant, peu importe combien de fois j'ajouté KeyListeners, la ne semble pas être tout associé au panneau.

Une autre chose que j'ai essayé a été la cible passe JTextField à la JPanel et la fixation d'un objet membre du JTextField. Mais chaque fois que j'essaie d'ajouter du texte à elle, l'objet membre est nul. Il est vraiment perplexe moi.

J'espère que quelqu'un pourrait me diriger dans la bonne direction avec la façon de mettre en œuvre ce clavier pour le rendre aussi modulaire est possible de sorte qu'il peut être utilisé à l'intérieur de plusieurs écrans différents.

Merci à l'avance!

Brent

Était-ce utile?

La solution

Vous ne avez pas besoin du KeyListener vous pouvez vous associer l'effet final de pression sur un bouton (ne est pas une clé) sur le JTextField.

Peut-être quelque chose comme:

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);
  }
}

Autres conseils

  

J'écris une application Java   aura un pavé numérique à l'écran   disponible pour toucher entrée.

Je suppose que lorsque le bouton est « touché » un ActionEvent sera généré. Ensuite, je suppose que vous voulez ajouter le caractère lié au bouton à un champ de texte. Si oui, alors les exemples suivants devraient vous aider à démarrer. Vous n'avez pas besoin de KeyEvents générés, vous répondez simplement aux 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);
    }
}

Si cela ne résout pas votre problème, alors vous devriez être à la recherche dans

scroll top