使用Swing时的Java方法 - 可以在同一个类中的另一个事件方法中调用event方法吗?

问题描述 投票:0回答:1

所以我是java新手,现在使用swing。我有一个方法(第一种方法),当我键入特定的jField和释放键时,它会执行一些代码。我也有jCheckBox,所以当我勾选或取消勾选复选框它会做一些动作,这是第二种方法。

所以当我勾选或取消勾选复选框时,我想要调用我的第一个方法,第一个方法必须执行它的代码。但似乎我有问题,我不能出于某种原因调用这种方法。

Part of first method

   private void bruttoTextFieldKeyReleased(java.awt.event.KeyEvent evt) {  
       //code
}

Second method trying to call first method

private void pensionCheckBoxStateChanged(javax.swing.event.ChangeEventevt) {                                             
       bruttoTextFieldKeyReleased();
}    

Those methods were created with this menu

这是暗示,但我不确定我需要做什么,它需要一些KeyEvent?我只想从另一个方法中启动一个方法,而不是放任何值而不返回。

Error Hint

java swing methods jframe call
1个回答
1
投票

要扩展Luvy的评论,并使用您的代码将其转换为答案。

现在,第一个方法采用KeyEvent,如下所示:

private void bruttoTextFieldKeyReleased(java.awt.event.KeyEvent evt) {
  double salaryBrutto = Double.parseDouble(bruttoTextField.getText());

  double taxPensRound;
  if (pensionCheckBox.isSelected()) {
    double taxPens = salaryBrutto * TAX_PENS;
    //more code

通过屏幕截图,看起来您很可能是从GUI构建器自动创建的,并且没有使用KeyEvent evt参数。如果没有传入KeyEvent,您将无法调用此方法,这就是为什么pensionCheckBoxStateChanged无法调用它。

Luvy的建议是用bruttoTextFieldKeyReleased按钮创建一个新方法,所以后面你会有两种方法:

private void bruttoTextFieldKeyReleased(java.awt.event.KeyEvent evt) {
  calculatePensionInformation();
  //maybe do something with evt later on
}

private void calculatePensionInformation() {
  double salaryBrutto = Double.parseDouble(bruttoTextField.getText());

  double taxPensRound;
  if (pensionCheckBox.isSelected()) {
    double taxPens = salaryBrutto * TAX_PENS;
    //more code

}

此时,您可以将现有的第二种方法更改为:

private void pensionCheckBoxStateChanged(javax.swing.event.ChangeEventevt) {                                             
   calculatePensionInformation();
}    

并且它会按预期工作,因为calculatePensionInformation不需要参数,并且您没有传递任何参数。

© www.soinside.com 2019 - 2024. All rights reserved.