我想在点击按钮时验证几个文本字段。
主要概念是让用户在少数文本字段中输入少量数字,当他点击按钮运行某些方法来验证输入时。
我想按下按钮
运行验证private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
}
这些是我想要验证的文本字段:
private javax.swing.JTextField jTextField1;
private javax.swing.JTextField jTextField2;
private javax.swing.JTextField jTextField3;
private javax.swing.JTextField jTextField4;
private javax.swing.JTextField jTextField5;
private javax.swing.JTextField jTextField6;
我在网上找到了一些代码,但我似乎无法让它运转起来。 这是代码:
JTextField[] fields;
void validation() { //call when appropriate(ie ActionListener of JButton)
System.out.println( "Called validation!");
int[] nums = new int[fields.length];
Set<Integer> set = new HashSet<>();
System.out.println( "Called validation!" + nums);
for (int i = 0; i < fields.length; i++) {
try {
nums[i] = Integer.parseInt(fields[i].getText());
} catch (NumberFormatException ex) {
//not a valid number tell user of error
JOptionPane.showMessageDialog(null,"Not a valid format");
return;
}
if (nums[i] < 1 || nums[i] > 48) {
//out of number range tell user of error
JOptionPane.showMessageDialog(null,"Range error");
return;
}
if (!set.add(nums[i])) {
//duplicate element tell user of error
JOptionPane.showMessageDialog(null,"Duplicate");
return;
}
}
JOptionPane.showMessageDialog(null,"A, OK");
}
如何使此方法能够在点击时使用。 当我运行此方法时,netbeans显示错误:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException...
答案 0 :(得分:0)
您可以尝试以下代码:
try{
int nums[] = new int[6];
nums[0] = Integer.parseInt(jTextField1.getText());
nums[1] = Integer.parseInt(jTextField2.getText());
nums[2] = Integer.parseInt(jTextField3.getText());
nums[3] = Integer.parseInt(jTextField4.getText());
nums[4] = Integer.parseInt(jTextField5.getText());
nums[5] = Integer.parseInt(jTextField6.getText());
} catch (NumberFormatException e){
System.out.println("Some field does not contain a number");
return;
}
for(int i=0; i<5; i++){
if(nums[i]==nums[i+1]){
System.out.println("Repeated number");
return;
}
}
对于浮点数:Float.parseFloat();
答案 1 :(得分:0)
在这一行:
int[] nums = new int[fields.length];
根据您的代码,fields
似乎从未初始化,因此您获得了NPE。
这些要求:
使用格式化文本字段或微调器而不是纯文本字段可以轻松完成。通过使用其中一个,您不必关心解析字符串,因为您可以使用户将输入限制为整数。您还可以为它们提供默认值,以便所有这些值都具有值。最后,您可以设置允许的值范围。
查看How to Use Formatted Text Fields和How to Use Spinners教程。
其他要求:
可以通过迭代格式化的文本字段或微调器,请求它们的值并验证这些条件来完成。
此示例基于格式化文本字段,但也可以使用微调器完成。
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.text.NumberFormatter;
public class Demo {
private void createAndShowGUI() {
NumberFormat format = NumberFormat.getInstance();
format.setParseIntegerOnly(true);
NumberFormatter formatter = new NumberFormatter(format);
formatter.setMinimum(1);
formatter.setMaximum(100);
formatter.setAllowsInvalid(false);
formatter.setOverwriteMode(true);
final JPanel gridPanel = new JPanel(new GridLayout(2, 3));
for (int i = 0; i < 6; i++) {
JFormattedTextField textField = new JFormattedTextField(formatter);
textField.setColumns(5);
textField.setValue(1);
gridPanel.add(textField);
}
JButton button = new JButton("Validate");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
List list = new ArrayList();
for(Component comp : gridPanel.getComponents()) {
JFormattedTextField textField = (JFormattedTextField)comp;
Integer value = (Integer)textField.getValue();
Color foreground = list.contains(value) ? Color.RED : Color.BLACK;
textField.setForeground(foreground);
list.add(value);
}
}
});
JFrame frame = new JFrame("Demo");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.add(gridPanel, BorderLayout.CENTER);
frame.add(button, BorderLayout.SOUTH);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Demo().createAndShowGUI();
}
});
}
}