Java,JTextField.equals
我试图比较验证部分的JTextField中的值,以确保如果所有textfield都没有值,用户无法保存进度 这是我对文本字段的方法Java,JTextField.equals,java,swing,user-interface,jtextfield,Java,Swing,User Interface,Jtextfield,我试图比较验证部分的JTextField中的值,以确保如果所有textfield都没有值,用户无法保存进度 这是我对文本字段的方法 public void DrawBookAttributes() { lblBookName = new JLabel("Book Name :"); lblBookName.setFont(getLblFont()); lblBookName.setSize(140, 20); lblBookName.setLocation(280
public void DrawBookAttributes() {
lblBookName = new JLabel("Book Name :");
lblBookName.setFont(getLblFont());
lblBookName.setSize(140, 20);
lblBookName.setLocation(280, 150);
menuFrame.add(lblBookName);
tfBookName = new JTextField();
tfBookName.setSize(140, 20);
tfBookName.setLocation(420, 150);
menuFrame.add(tfBookName);
lblBookID = new JLabel("Book ID :");
lblBookID.setFont(getLblFont());
lblBookID.setSize(140, 20);
lblBookID.setLocation(280, 50);
menuFrame.add(lblBookID);
tfBookID = new JTextField();
tfBookID.setSize(140, 20);
tfBookID.setLocation(420, 50);
tfBookID.setText("hello");
tfBookID.setEditable(false);
menuFrame.add(tfBookID);
JLabel lblBookCost = new JLabel("Cost (£) :");
lblBookCost.setFont(getLblFont());
lblBookCost.setSize(140, 20);
lblBookCost.setLocation(280, 200);
menuFrame.add(lblBookCost);
tfBookCost = new JTextField();
tfBookCost.setSize(140, 20);
tfBookCost.setLocation(420, 200);
tfBookCost.addKeyListener(this);
menuFrame.add(tfBookCost);
lblBookYearOfPublication = new JLabel("Publication Date :");
lblBookYearOfPublication.setSize(140, 20);
lblBookYearOfPublication.setLocation(280, 250);
lblBookYearOfPublication.setFont(getLblFont());
menuFrame.add(lblBookYearOfPublication);
JTextField tfBookYearOfPublication = new JTextField();
tfBookYearOfPublication.setSize(140, 20);
tfBookYearOfPublication.setLocation(420, 250);
tfBookYearOfPublication.setText("DD-MM-YYYY");
tfBookYearOfPublication.addActionListener(this);
menuFrame.add(tfBookYearOfPublication);
JLabel lblbookPublishngHouse = new JLabel("Publishing Orgaisation :");
lblbookPublishngHouse.setSize(140, 20);
lblbookPublishngHouse.setLocation(280, 300);
lblbookPublishngHouse.setFont(getLblFont());
menuFrame.add(lblbookPublishngHouse);
JTextField tfBookPublishingHouse = new JTextField();
tfBookPublishingHouse.setSize(140, 20);
tfBookPublishingHouse.setLocation(420, 300);
menuFrame.add(tfBookPublishingHouse);
JLabel lblBookISBN = new JLabel("ISBN :");
lblBookISBN.setSize(140, 20);
lblBookISBN.setLocation(280, 350);
lblBookISBN.setFont(getLblFont());
menuFrame.add(lblBookISBN);
JTextField tfBookISBN = new JTextField();
tfBookISBN.setSize(140, 20);
tfBookISBN.setLocation(420, 350);
menuFrame.add(tfBookISBN);
JLabel lblBookPages = new JLabel("Number of Pages :");
lblBookPages.setSize(140, 20);
lblBookPages.setLocation(280, 400);
lblBookPages.setFont(getLblFont());
menuFrame.add(lblBookPages);
JTextField tfBookPages = new JTextField();
tfBookPages.setSize(140, 20);
tfBookPages.setLocation(420, 400);
menuFrame.add(tfBookPages);
menuFrame.setVisible(true);
}
这是验证部分
public void EntryCheck() {
if (tfBookName.getText().equals("")) {
EntryChecker++;
System.out.println(EntryChecker);
}
if (tfBookISBN.getText().equals("")) {
EntryChecker++;
}
if (tfBookCost.getText().equals("")) {
EntryChecker++;
}
if (tfBookPages.getText().equals("")) {
EntryChecker++;
}
if (tfBookPublishingHouse.getText().equals("")) {
EntryChecker++;
}
if (tfBookYearOfPublication.getText().equals("")) {
EntryChecker++;
}
if (tfBookCost.getText().equals("DD-MM-YYY")) {
EntryChecker++;
}
System.out.println(EntryChecker);
}
EntryChecker是一个整数,每当用户离开TextField而不在其中输入信息时,我都会给它添加一个值
每次调试程序时,我都会在验证行中遇到NullPointerException
if (tfBookISBN.getText().equals("")) {
EntryChecker++;
有人知道问题出在哪里以及如何解决吗
谢谢大家! 如果——正如你在评论中所说——你有
private JTextField tfBookISBN=new JTextField()代码>
类中的全局范围,然后必须删除该行
JTextField tfBookISBN=newjtextfield()代码>
从DrawBookAttributes()
如果在声明时它没有初始化(我认为不是),您需要将该行保留在DrawBookAttributes()
中,但作为initialize而不是declare,如下所示:
tfBookISBN=newjtextfield()代码>
因为您正在方法中创建一个新字段,而未初始化全局字段,当EntryCheck()
尝试访问该对象以调用getText()
时,全局字段将创建一个NPE,您确定if语句中的tfBookISBN
在创建字段时是同一个对象引用吗?我的意思是上面代码的作用域是什么,你有一个全局tfBookISBN吗?还有一个在方法中?i、 e发布更多代码:)@Yazan tfBookISBN是全局和私有的,我在一个方法中声明它,并在同一类中的另一个方法中访问它。@Yazan根据您的请求添加了两个方法中的所有代码。我已在下面发布了答案。