我正在编写一个Java应用程序,它将具有可用于触摸输入的屏幕数字键盘。也可以使用普通键输入,但我喜欢那里的键盘用于平板电脑等。我做了一个扩展JPanel的课程。它有10个按钮,采用普通键盘配置。现在我想弄清楚如何让它像常规键盘一样。
我只是不知道如何发布KeyEvents。这是我到目前为止所尝试的内容:
我尝试添加一个新的KeyListener。在JPanel中,当按下按钮时,动作侦听器调用一个方法,该方法创建一个新的KeyEvent并将其发送到添加到JPanel的所有KeyListener。但是,无论我添加了多少次KeyListeners,似乎都没有与面板相关联。
我尝试的另一件事是将目标JTextField传递给JPanel并将成员对象设置为JTextField。但每次我尝试向其追加文本时,成员对象都为null。这对我来说真的很困惑。
我希望有人能指出我正确的方向,如何实现这个键盘,使其成为模块化的,因此可以在几个不同的屏幕内使用。
提前致谢!
布伦特
答案 0 :(得分: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);
}
}
答案 1 :(得分:0)
我正在编写一个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。