Domanda

Sto scrivendo un'applicazione Java che avrà un tastierino numerico a video disponibile per il touch-input. input chiave normale sarà anche disponibile, ma mi piacerebbe la tastiera lì per tablet e così via. Ho fatto una classe che estende JPanel. Dispone di 10 tasti disposti nella configurazione della tastiera normale. Ora sto cercando di capire come farlo agire come una tastiera normale.

Ho appena non so come emettere KeyEvents. Ecco quello che ho provato finora:

Ho provato ad aggiungere un nuovo KeyListener. Nel JPanel, quando è stato premuto un pulsante, l'action listener chiamato un metodo che ha creato una nuova KeyEvent e lo ha inviato a tutti i KeyListeners che sono stati aggiunti al JPanel. Tuttavia, non importa quante volte ho aggiunto KeyListeners, il non sembrava essere qualsiasi associato al pannello.

Un'altra cosa che ho provato stava passando il bersaglio JTextField al JPanel e l'impostazione di un oggetto membro al JTextField. Ma ogni volta che provo a aggiungere testo ad esso, l'oggetto membro è nullo. E 'davvero perplessi per me.

Sto sperando che qualcuno mi potrebbe punto nella giusta direzione con il modo di implementare questa tastiera per rendere il più modulare è possibile, in modo che possa essere utilizzato all'interno di diversi schermi differenti.

Grazie in anticipo!

Brent

È stato utile?

Soluzione

Non avete bisogno del KeyListener è possibile associare voi stessi l'effetto risultato di pressione di un tasto (la sua non è una chiave) sul JTextField.

Forse qualcosa di simile:

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

Dove

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

Altri suggerimenti

  

Sto scrivendo un'applicazione Java che   avrà un tastierino numerico su schermo   disponibile per il tocco di ingresso.

Quindi presumo che quando il tasto viene "toccato" un ActionEvent verrà generato. Allora presumo che si vuole aggiungere il carattere relativo al pulsante per un campo di testo. Se è così, i seguenti esempi dovrebbero iniziare. Non è necessario a KeyEvents generati, basta rispondere alle 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);
    }
}

Se questo non risolve il problema, allora si dovrebbe guardare in chiave Attacchi invece di usare KeyEvents.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top