javafx:如何使用按钮操作事件调用同一类中的方法?我有多个错误和部分代码无法运行



javafx:如何使用按钮操作事件调用同一类中的方法?我有一个错误:"必须捕获或声明要抛出未报告的异常异常"。

我正在尝试创建一个保存按钮以将信息保存在表单上。 我知道如何将按钮放在网格窗格上。

我有一个由教授提供的方法,可以将表单信息保存到文件中。

我不知道如何修复我的代码以获取调用该方法的按钮。

我基本上已经尝试了以任何可能有意义的方式移动代码段的多种排列。我已经搜索并找到了其他语言中这个问题的解决方案,但没有在java中,更不用说使用javaFX了。

package programmingassignment1;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.*;
import javafx.stage.Stage;
import java.io.*; //input/output
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
public class Address_ex extends Application {
String contactLast; 
@Override
public void start(Stage primaryStage) {
TextField tf_contactLast = new TextField();
contactLast = tf_contactLast.getText();
Button bt_save = new Button("Save");
GridPane rootPane = new GridPane(); 
rootPane.add(new Label("Last Name"), 2, 1);
rootPane.add(tf_contactLast, 2, 2);    
rootPane.add(bt_save, 5, 2);

//Setting an action for the Save button        
File file = new File("AddressBook.txt");
bt_save.setOnAction(e -> {saveContact(file);});
//-> unreported exception, fileNotFoundException; must be caught or 
//declared to be thrown
Scene scene = new Scene(rootPane, 1000, 500);
primaryStage.setTitle("Address Book");
primaryStage.setScene(scene);
primaryStage.show();
}
public void saveContact(File file) throws FileNotFoundException{ 
//->illegal start of expression
try{
PrintWriter output = new PrintWriter (file);
output.println(contactLast);
output.close();
}
catch(FileNotFoundException e){
throw new FileNotFoundException(e.getMessage());
//unreported exception Exception must be caught or declared to be thrown
}
}
public static void main(String[] args) {
launch(args);
}
}

期望: 用户输入姓氏并单击保存,然后创建一个文本文件,并将姓氏打印在文件中。

编辑 0: 当我以这种方式尝试时,该程序运行良好:

bt_save.setOnAction(e -> {
try {
contactLast = tf_contactLast.getText();
saveContact(file);
} catch (FileNotFoundException ex) {
ex.printStackTrace();
}
});

既然你把方法扔进saveContact()FileNotFoundException,你必须抓住它。用trycatch包围saveContact(file);。此外,您没有更新contactLast可以使用getText()方法在 JavaFX 中获取文本字段的文本。另外,我看到您将您的类放在一个包中,请注意您将文件保存在src中的位置。

编辑1:此外,在他们说使用标准Java命名约定的评论中,您似乎正在使用python命名约定foo_bar在Java中,对于类的方法和变量fooBar就像FooBar一样。这很重要,因为例如,如果您要使用像SpringBoot这样的框架,它依赖于使用标准Java命名约定的程序员。

最新更新