Java文本框和键盘事件处理例题
编写窗体程序,界面上设置三个文本框,第一个文本框给用户输入商品单价,第二个则是给用户输入商品数量,第三个用于显示总金额。
要求:
①单价框和商品数量框中要求输入的只能数字;
②当在单价框中按“回车”时商品数量框获得焦点,当在数量框中按“回车”时完成计算并在总金额框中显示总金额。
1 import javax.swing.*; 2 import java.awt.event.*; 3 public class eg3 extends JFrame{ 4 JLabel L1,L2,L3; 5 JTextField text1,text2,text3; 6 double t1,t2; 7 8 public eg3() { 9 super("计算总金额"); 10 setSize(300,150); 11 init(); 12 //点击主窗体上的“x”,可关闭退出程序 13 setDefaultCloseOperation(EXIT_ON_CLOSE); 14 //显示主窗体 15 setVisible(true); 16 } 17 18 public double shuZhi(String s) { 19 double shu=0; 20 //如果转换报错,则字符串中有非数字,弹出消息窗口 21 try { 22 shu=Double.parseDouble(s); 23 } catch (Exception e) { 24 JOptionPane.showMessageDialog(null,"价格必须为数值"); 25 } 26 return shu; 27 } 28 29 public void init() { 30 L1=new JLabel("商品单价:"); 31 L2=new JLabel("购买数量:"); 32 L3=new JLabel("应付金额:"); 33 text1=new JTextField(20); 34 text2=new JTextField(20); 35 text3=new JTextField(20); 36 text3.setEditable(false); 37 38 setLayout(null); 39 L1.setBounds(30,10,60,20); 40 text1.setBounds(90,10,150,20); 41 L2.setBounds(30,40,60,20); 42 text2.setBounds(90,40,150,20); 43 L3.setBounds(30,70,60,20); 44 text3.setBounds(90,70,150,20); 45 add(L1); 46 add(text1); 47 add(L2); 48 add(text2); 49 add(L3); 50 add(text3); 51 52 //text1文本框中回车触发事件 53 text1.addKeyListener(new KeyAdapter() { 54 public void keyTyped(KeyEvent e) { 55 if((char)e.getKeyChar()==KeyEvent.VK_ENTER) { 56 t1=shuZhi(text1.getText()); 57 //光标移动到text2文本框 58 text2.requestFocus(); 59 } 60 } 61 }); 62 63 //text2文本框中回车触发事件 64 text2.addKeyListener(new KeyAdapter() { 65 public void keyTyped(KeyEvent e) { 66 if((char)e.getKeyChar()==KeyEvent.VK_ENTER) { 67 t2=shuZhi(text2.getText()); 68 text3.setText(t1*t2+"元"); 69 } 70 } 71 }); 72 } 73 74 public static void main(String[] args) { 75 new eg3(); 76 } 77 78 }
运行效果截图: