Java中的事件处理程序
我有一个程序,我正在尝试使用JavaFX中的事件处理程序来让按钮完成一些事情,例如标记为Exit的按钮来结束程序。我认为我的代码是正确的,但它不起作用。你知道怎么做吗?代码如下:Java中的事件处理程序,java,javafx,Java,Javafx,我有一个程序,我正在尝试使用JavaFX中的事件处理程序来让按钮完成一些事情,例如标记为Exit的按钮来结束程序。我认为我的代码是正确的,但它不起作用。你知道怎么做吗?代码如下: import edu.seminolestate.studentanalysis.ActionEvent; import edu.seminolestate.studentanalysis.EventHandler; import javafx.application.Application; import javaf
import edu.seminolestate.studentanalysis.ActionEvent;
import edu.seminolestate.studentanalysis.EventHandler;
import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.FlowPane;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;
public class ProcessPayrollApplication extends Application {
HourlyEmployee hE = new HourlyEmployee(newName, hoursWorked, hourlyRate);
@Override
public void start(Stage primaryStage) throws Exception {
Label lblName = new Label("Employee name: ");
Label lblHours = new Label("Hours worked: ");
Label lblHourlyPay = new Label("Hourly pay rate: ");
Label lblGrossPay = new Label("Gross pay:" + hE.computeGrossPay());
Label lblTaxes = new Label("Taxes: " + hE.computeTaxAmount());
Label lblNetPay = new Label("Net pay: " + hE.computeNetPay());
TextField txtName = new TextField();
TextField txtHours = new TextField();
TextField txtPay = new TextField();
Button btnCalculate = new Button ("Calculate");
Button btnClear = new Button ("Clear");
Button btnExit = new Button ("Exit");
BorderPane bp = new BorderPane();
GridPane gp = new GridPane();
gp.setVgap(15);
gp.setHgap(15);
FlowPane fp = new FlowPane();
fp.setHgap(10);
fp.setAlignment(Pos.CENTER);
gp.add(lblName, 0, 0);
gp.add(lblHours, 0, 1);
gp.add(lblHourlyPay, 0, 2);
gp.add(lblGrossPay, 0, 3);
gp.add(lblTaxes, 0, 4);
gp.add(lblNetPay, 0, 5);
gp.add(txtName, 1, 0, 2, 1);
gp.add(txtHours, 1, 1, 2, 1);
gp.add(txtPay, 1, 2, 2, 1);
BorderPane.setAlignment(gp, Pos.CENTER);
bp.setCenter(gp);
BorderPane.setAlignment(fp, Pos.CENTER);
bp.setBottom(fp);
//Add event handlers
btnExit.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.exit(0);
}
});
Scene scene = new Scene(bp, 350, 250);
primaryStage.setScene(scene);
primaryStage.show();
primaryStage.setTitle("Payroll");
}
public static void main(String[] args) {
Application.launch(args);
}
}
导入edu.seminolestate.studentanalysis.ActionEvent;
导入edu.seminolestate.studentanalysis.EventHandler;
导入javafx.application.application;
导入javafx.geometry.Pos;
导入javafx.scene.scene;
导入javafx.scene.control.Button;
导入javafx.scene.control.Label;
导入javafx.scene.control.TextField;
导入javafx.scene.layout.BorderPane;
导入javafx.scene.layout.FlowPane;
导入javafx.scene.layout.GridPane;
导入javafx.stage.stage;
公共类ProcessPayrollApplication扩展了应用程序{
HourlyEmployee hE=新的HourlyEmployee(新姓名、工作时数、工作时数);
@凌驾
public void start(Stage primaryStage)引发异常{
Label lblName=新标签(“员工姓名:”);
Label lblHours=新标签(“工时:”);
Label lblHourlyPay=新标签(“小时工资率”);
Label lblGrossPay=新标签(“总薪酬:+hE.computeGrossPay());
Label lblTaxes=新标签(“Taxes:+hE.computeTaxAmount());
Label lblNetPay=新标签(“净支付:+hE.computeNetPay());
TextField txtName=新建TextField();
TextField txtHours=新建TextField();
TextField txtPay=新建TextField();
按钮btnCalculate=新按钮(“计算”);
按钮btnClear=新按钮(“清除”);
按钮btnExit=新按钮(“退出”);
BorderPane bp=新的BorderPane();
GridPane gp=新的GridPane();
总成setVgap(15);
setHgap总经理(15);
FlowPane fp=新的FlowPane();
fp.setHgap(10);
fp.设置校准(位置中心);
加总成(lblName,0,0);
加总成(磅小时,0,1);
加总成(lblHourlyPay,0,2);
加总成(lblGrossPay,0,3);
加总成(lblTaxes,0,4);
加总成(lblNetPay,0,5);
添加(txtName,1,0,2,1);
加总成(TXT小时,1,1,2,1);
普通股增加(txtPay,1,2,2,1);
边框窗格设置对齐(总成,位置中心);
设置中心(gp);
边框窗格。设置对齐(fp,位置中心);
bp.setBottom(fp);
//添加事件处理程序
setOnAction(新的EventHandler(){
@凌驾
公共无效句柄(ActionEvent事件){
系统出口(0);
}
});
场景=新场景(bp,350250);
初级阶段。场景(场景);
primaryStage.show();
初级阶段。设置标题(“工资单”);
}
公共静态void main(字符串[]args){
应用程序启动(args);
}
}
更换
import edu.seminolestate.studentanalysis.ActionEvent;
import edu.seminolestate.studentanalysis.EventHandler;
与
然后别忘了将按钮添加到窗格中。替换
import edu.seminolestate.studentanalysis.ActionEvent;
import edu.seminolestate.studentanalysis.EventHandler;
与
然后不要忘记将按钮添加到窗格。您没有将这些按钮添加到场景中,启动应用程序时是否看到这些按钮?关于捕捉按钮点击你做得对@Flood2d我将它们添加到FlowPane,FlowPane将添加到BorderPane,BorderPane将添加到场景。这样做不好吗?编辑:等等,我没有添加它们。。。我是dense。没关系,但在你发布的代码中,我看不到你在哪里将它们添加到FlowPane,你创建它们,将侦听器添加到btnExit,但你没有将它们添加到FlowPane。如果你能以图形方式看到它们,也许你遗漏了部分代码?@Flood2d你是对的,我没有添加它们,不知道我怎么会错过,非常感谢你,伙计。你没有将这些按钮添加到场景中,你启动应用程序时看到这些按钮了吗?关于捕捉按钮点击你做得对@Flood2d我将它们添加到FlowPane,FlowPane将添加到BorderPane,BorderPane将添加到场景。这样做不好吗?编辑:等等,我没有添加它们。。。我是dense。没关系,但在你发布的代码中,我看不到你在哪里将它们添加到FlowPane,你创建它们,将侦听器添加到btnExit,但你没有将它们添加到FlowPane。如果你能以图形的方式看到它们,也许你遗漏了部分代码?@Flood2d你是对的,我没有添加它们,不知道我怎么会错过,非常感谢你,伙计。