2010-08-09 13 views
0

我正在編寫一個Java應用程序,該應用程序將具有可用於觸摸輸入的屏幕數字鍵盤。普通的鍵盤輸入也是可用的,但我希望鍵盤那裏有鍵盤。我做了一個擴展JPanel的類。它在普通鍵盤配置中有10個按鈕。現在我試圖弄清楚如何使它像一個普通的鍵盤。用於KeyPad組件的Java KeyEvents

我只是不知道如何發出KeyEvents。這是我迄今爲止所嘗試的:

我試着添加一個新的KeyListener。在JPanel中,當一個按鈕被按下時,動作偵聽器調用一個方法來創建一個新的KeyEvent並將其發送給所有添加到JPanel的KeyListener。但是,無論我添加KeyListeners多少次,它似乎都沒有與面板關聯。

我試過的另一件事是將目標JTextField傳遞給JPanel並將成員對象設置爲JTextField。但每次我嘗試追加文本時,成員對象都是空的。這對我來說真的很困難。

我希望有人能指出我在正確的方向與如何實現這個鍵盤,使它作爲模塊化是可能的,因此它可以在幾個不同的屏幕內使用。

在此先感謝!

布倫特

+0

添加一些代碼,你添加的KeyListener,提高該KeyEvent的按鈕動作監聽器。 – 2010-08-09 03:59:02

回答

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

我正在寫 將有一個屏幕上的數字鍵盤 可用於觸摸輸入的Java應用程序。

所以我假設當按鈕被「接觸」時,會產生一個ActionEvent。然後,我假設您將要將與該按鈕相關的字符添加到文本字段。如果是這樣,那麼下面的例子應該讓你開始。你並不需要產生的KeyEvents,你只是在迴應是ActionEvent:

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而不是使用的KeyEvent。