java jtextfield 改变_每次更改jTextField时自动更新总和(Java)

本文介绍了如何在Java Swing应用中实现文本字段的数字输入限制和实时求和功能,通过DocumentListener和DocumentFilter确保用户输入的正确性,并在用户输入变化时自动计算总和。
摘要由CSDN通过智能技术生成

小编典典

如@Reimeus建议的那样,您需要将Document

Listener添加到每个文本字段中。由于您要在jButton1ActionPerformed()方法中执行添加操作,因此,只要您的文本字段发生更改,我都会通知侦听器通知此方法。

注意 :

根据评论,我将代码更新为仅包含一个DocumentListener,还添加了一个DocumentFilter仅接受数字输入。我还删除了原始代码中存在的按钮以执行求和

这是您的更新代码:

import javax.swing.event.DocumentEvent;

import javax.swing.event.DocumentListener;

import javax.swing.text.AbstractDocument;

import javax.swing.text.AttributeSet;

import javax.swing.text.BadLocationException;

import javax.swing.text.DocumentFilter;

public class Frame extends javax.swing.JFrame {

public Frame() {

initComponents();

}

@SuppressWarnings("unchecked")

//

private void initComponents() {

n1 = new javax.swing.JTextField();

n2 = new javax.swing.JTextField();

n3 = new javax.swing.JTextField();

sum = new javax.swing.JTextField();

jLabel1 = new javax.swing.JLabel();

jLabel2 = new javax.swing.JLabel();

jLabel3 = new javax.swing.JLabel();

jLabel5 = new javax.swing.JLabel();

DocumentListener documentListener = new DocumentListener() {

@Override

public void removeUpdate(DocumentEvent e) {

performSummation(null);

}

@Override

public void insertUpdate(DocumentEvent e) {

performSummation(null);

}

@Override

public void changedUpdate(DocumentEvent e) {

}

};

DocumentFilter numericFilter = new DocumentFilter(){

@Override

public void insertString(FilterBypass fb, int offset,

String string, AttributeSet attr)

throws BadLocationException {

fb.insertString(offset, string.replaceAll("[^\\d]", ""), attr);

}

@Override

public void replace(FilterBypass fb, int offset, int length,

String text, AttributeSet attrs)

throws BadLocationException {

fb.replace(offset, length, text.replaceAll("[^\\d]", ""), attrs);

}

};

((AbstractDocument) n1.getDocument()).setDocumentFilter(numericFilter);

((AbstractDocument) n2.getDocument()).setDocumentFilter(numericFilter);

((AbstractDocument) n3.getDocument()).setDocumentFilter(numericFilter);

n1.getDocument().addDocumentListener(documentListener);

n2.getDocument().addDocumentListener(documentListener);

n3.getDocument().addDocumentListener(documentListener);

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

jLabel1.setText("n1");

jLabel2.setText("n2");

jLabel3.setText("n3");

jLabel5.setText("result");

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(15, 15, 15)

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)

.addComponent(jLabel1)

.addComponent(jLabel2)

.addComponent(jLabel3)))

.addGroup(layout.createSequentialGroup()

.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)

.addComponent(jLabel5)))

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(layout.createSequentialGroup()

.addComponent(sum, javax.swing.GroupLayout.PREFERRED_SIZE, 59, javax.swing.GroupLayout.PREFERRED_SIZE)

.addGap(30, 30, 30)

.addContainerGap())

.addGroup(layout.createSequentialGroup()

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addComponent(n1, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)

.addComponent(n2, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)

.addComponent(n3, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE))

.addGap(0, 0, Short.MAX_VALUE))))

);

layout.setVerticalGroup(

layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(layout.createSequentialGroup()

.addGap(32, 32, 32)

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)

.addGroup(layout.createSequentialGroup()

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)

.addComponent(n1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)

.addComponent(jLabel1))

.addGap(10, 10, 10)

.addComponent(n2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))

.addComponent(jLabel2))

.addGap(20, 20, 20)

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)

.addComponent(n3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)

.addComponent(jLabel3))

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)

.addComponent(sum, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)

.addComponent(jLabel5))

.addContainerGap(38, Short.MAX_VALUE))

);

pack();

}//

private void performSummation(java.awt.event.ActionEvent evt) {

int total = 0;

if(n1.getText().trim().length() > 0){

try{

total += Integer.parseInt(n1.getText());

}catch(NumberFormatException nbx){

}

}

if(n2.getText().trim().length() > 0){

try{

total += Integer.parseInt(n2.getText());

}catch(NumberFormatException nbx){

}

}

if(n3.getText().trim().length() > 0){

try{

total += Integer.parseInt(n3.getText());

}catch(NumberFormatException nbx){

}

}

sum.setText(""+total);

}

public static void main(String args[]) {

/* Set the Nimbus look and feel */

//

/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.

* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html

*/

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(Frame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);

} catch (InstantiationException ex) {

java.util.logging.Logger.getLogger(Frame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);

} catch (IllegalAccessException ex) {

java.util.logging.Logger.getLogger(Frame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);

} catch (javax.swing.UnsupportedLookAndFeelException ex) {

java.util.logging.Logger.getLogger(Frame.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 Frame().setVisible(true);

}

});

}

// Variables declaration - do not modify

private javax.swing.JLabel jLabel1;

private javax.swing.JLabel jLabel2;

private javax.swing.JLabel jLabel3;

private javax.swing.JLabel jLabel5;

private javax.swing.JTextField n1;

private javax.swing.JTextField n2;

private javax.swing.JTextField n3;

private javax.swing.JTextField sum;

// End of variables declaration

}

几个指针:

永远不要相信来自用户的输入。用户可能输入了错误的值( 例如,不是Integer的内容 )。因此,验证输入并检查输入是否可以真正解析总是一个好主意。记住这一点,我已经更新了您的jButton1ActionPerformed()方法

另一种选择是使用格式化文本字段

2020-10-16

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值