我正在编写一个Java应用程序,它将有一个可用于触摸输入的屏幕数字键盘。普通的按键输入也是可用的,但我想要的是平板电脑之类的键盘。我制作了一个扩展JPanel的类。它在正常的键盘配置中有10个按钮。现在,我正在尝试弄清楚如何让它像普通的键盘一样工作。
我只是不知道如何发布KeyEvents。这是我到目前为止尝试过的:
我尝试添加一个新的KeyListener。在JPanel中,当按下按钮时,操作侦听器将调用一个创建新KeyEvent的方法,并将其发送到添加到JPanel的所有KeyListeners。然而,无论我添加了多少次KeyListeners,似乎都与面板没有任何关联。
我尝试的另一件事是将目标JTextField传递给JPanel,并将一个成员对象设置为JTextField。但每次我尝试向其追加文本时,成员对象都是空的。这真的让我很困惑。
我希望有人能为我指出正确的方向,如何实现这个键盘,使其模块化成为可能,以便它可以在几个不同的屏幕中使用。
提前感谢!
布伦特
发布于 2010-08-09 12:14:05
您不需要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);
}
}发布于 2010-08-09 12:11:08
我正在写一个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。
https://stackoverflow.com/questions/3437190
复制相似问题