Re_member 2015-06-13 14:52 采纳率: 33.3%
浏览 1645
已采纳

文本框加入的事件出现问题

一段用NetBeans生成的 有些没用的直接忽略就可以的 问题在前十来行的 e.consume(); 是这样的 本来是文本框加个事件不是数字不能输入 结果出现了 什么都能输入 而且退格左右移动光标都废了 是否数字判断也没问题 !
package cn.itcast_07;

import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

/**
*

  • @author Hunter
    */
    public class NewJFrame extends javax.swing.JFrame {

    public NewJFrame() {
    initComponents();
    onlynum();
    init();
    }

    public void onlynum() {
    this.firstNumber.addKeyListener(new KeyAdapter() {

         @Override
         public void keyPressed(KeyEvent e) {
             char ch = e.getKeyChar();
             if (!(ch > '0' && ch < '9')) {
                 e.consume();
             }
         }
     });
    this.secondNumber.addKeyListener(new KeyAdapter() {
    
        @Override
        public void keyPressed(KeyEvent e) {
            char ch = e.getKeyChar();
            if (!(ch > '0' && ch < '9')) {
                e.consume();
            }
        }
    });
    

    }

    private void init() {
    this.setTitle("模拟四呢运算");
    }

    private void initComponents() {

    jLabel1 = new javax.swing.JLabel();
    jLabel2 = new javax.swing.JLabel();
    jLabel3 = new javax.swing.JLabel();
    firstNumber = new javax.swing.JTextField();
    secondNumber = new javax.swing.JTextField();
    result = new javax.swing.JTextField();
    operator = new javax.swing.JComboBox();
    jButton1 = new javax.swing.JButton();
    
    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    
    jLabel1.setText("第一个数");
    
    jLabel2.setText("第二个数");
    
    jLabel3.setText("结果");
    
    operator.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "+", "-", "*", "/" }));
    
    jButton1.setText("计算");
    jButton1.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButton1ActionPerformed(evt);
        }
    });
    
    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addGap(25, 25, 25)
                    .addComponent(firstNumber)
                    .addGap(20, 20, 20))
                .addGroup(layout.createSequentialGroup()
                    .addGap(37, 37, 37)
                    .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 78, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 26, Short.MAX_VALUE)))
            .addComponent(operator, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addGap(18, 18, 18)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addGap(0, 22, Short.MAX_VALUE)
                    .addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 57, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGap(75, 75, 75)
                    .addComponent(jLabel3)
                    .addGap(62, 62, 62))
                .addGroup(layout.createSequentialGroup()
                    .addComponent(secondNumber, javax.swing.GroupLayout.PREFERRED_SIZE, 92, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                        .addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, 79, Short.MAX_VALUE)
                        .addComponent(result))
                    .addGap(0, 0, Short.MAX_VALUE))))
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addGap(33, 33, 33)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addComponent(jLabel2)
                .addComponent(jLabel3))
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(firstNumber, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addComponent(secondNumber, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addComponent(result, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addComponent(operator, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 28, Short.MAX_VALUE)
            .addComponent(jButton1)
            .addContainerGap())
    );
    
    pack();
    

    }// //GEN-END:initComponents

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
    //获取第一个操作数
    String firstNumberString = this.firstNumber.getText().trim();
    //获取第二个操作数
    String secondNumberString = this.secondNumber.getText().trim();
    //获取运算符
    String operatorString = this.operator.getSelectedItem().toString();

    ////第一个数转成int
    int firstNumber = Integer.parseInt(firstNumberString);
    //第二个数转成int
    int secondNumber = Integer.parseInt(secondNumberString);

    int resultNumber = 0;
    switch (operatorString) {
        case "+":
            resultNumber = firstNumber + secondNumber;
            break;
        case "-":
            resultNumber = firstNumber - secondNumber;
            break;
        case "*":
            resultNumber = firstNumber * secondNumber;
            break;
        case "/":
            resultNumber = firstNumber / secondNumber;
            break;
    }
    this.result.setText(String.valueOf(resultNumber));
    

    }//GEN-LAST:event_jButton1ActionPerformed

    /**

    • @param args the command line arguments
      */
      public static void main(String args[]) {

      try {
      for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
      if ("Nimbus".equals(info.getName())) {
      javax.swing.UIManager.setLookAndFeel(info.getClassName());
      break;

          }
      }
      

      } catch (ClassNotFoundException ex) {
      java.util.logging.Logger.getLogger(NewJFrame.class
      .getName()).log(java.util.logging.Level.SEVERE, null, ex);
      } catch (InstantiationException ex) {
      java.util.logging.Logger.getLogger(NewJFrame.class
      .getName()).log(java.util.logging.Level.SEVERE, null, ex);
      } catch (IllegalAccessException ex) {
      java.util.logging.Logger.getLogger(NewJFrame.class
      .getName()).log(java.util.logging.Level.SEVERE, null, ex);
      } catch (javax.swing.UnsupportedLookAndFeelException ex) {
      java.util.logging.Logger.getLogger(NewJFrame.class
      .getName()).log(java.util.logging.Level.SEVERE, null, ex);
      }
      //

      /* Create and display the form */
      java.awt.EventQueue.invokeLater(new Runnable() {
      public void run() {
      new NewJFrame().setVisible(true);
      }
      });
      }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JTextField firstNumber;
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JComboBox operator;
    private javax.swing.JTextField result;
    private javax.swing.JTextField secondNumber;
    // End of variables declaration//GEN-END:variables
    }

图片说明

  • 写回答

4条回答 默认 最新

  • JonsonJiao 2015-06-14 14:14
    关注

    你的想法是正确的,通过判断按下的键是否是0-9的值在进行输入,但是你的逻辑是错误的,你的判断方法中先不说对不对,你的if是当输入的字符不是0-9时什么也不错继续进行,这样就跟你想的完全相反了,按我的理解当不是0-9时要做些什么处理的,而你用consume方法是没有意义的。
    要不是你理解的consume有误,要不就是逻辑写反了。

    其次,你这样判断是不正确的,这个KeyEvent只是在你按下的时候触发无法满足你的需求,即使你改了输入的Key值也无法阻止摁下的键输入到文本框中;

    最后告诉你在文本框中Java是提供了Document接口来实现特定内容的输入的,比如数字,你可以参考我下面改写的你的方法,这样就只能输入正整数了,需要输入浮点数或者负数只要在for循环中更改条件即可。

    public void onlynum() {
            this.firstNumber.setDocument(new PlainDocument() {
                @Override
                public void insertString(int offs, String str, AttributeSet a)
                        throws BadLocationException {
                    // TODO Auto-generated method stub
                    for (int i = 0; i < str.length(); i++) {
                        if (str.charAt(i) < '0' || str.charAt(i) > '9') {
                            return;
                        }
                    }
                    super.insertString(offs, str, a);
                }
    
            });
            this.secondNumber.setDocument(new PlainDocument() {
                @Override
                public void insertString(int offs, String str, AttributeSet a)
                        throws BadLocationException {
                    // TODO Auto-generated method stub
                    for (int i = 0; i < str.length(); i++) {
                        if (str.charAt(i) < '0' || str.charAt(i) > '9') {
                            return;
                        }
                    }
                    super.insertString(offs, str, a);
                }
    
            });
            this.firstNumber.addKeyListener(new KeyAdapter() {
                @Override
                public void keyPressed(KeyEvent e) {
                    char ch = e.getKeyChar();
                    if (!(ch > '0' && ch < '9')) {
                        e.consume();
                    }
                }
            });
            this.secondNumber.addKeyListener(new KeyAdapter() {
    
                @Override
                public void keyPressed(KeyEvent e) {
                    char ch = e.getKeyChar();
                    if (!(ch > '0' && ch < '9')) {
                        e.consume();
                    }
                }
            });
        }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题
  • ¥15 Python时间序列如何拟合疏系数模型