【问题标题】:Java Methods when working with Swing - It is possible to call event method in another event method in same class?使用 Swing 时的 Java 方法 - 可以在同一类的另一个事件方法中调用事件方法吗?
【发布时间】:2018-09-03 17:16:44
【问题描述】:

所以我是 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 中的普通方法工作方式相同,在这种情况下,问题是您没有将所需的 keyEvent 传递给您尝试调用的 bruttoTextFieldKeyReleased 方法。您可以创建一个 KeyEvent 并将其传递给该方法,但我怀疑这是您想要做的。而是考虑将bruttoTextFieldKeyReleased 中的逻辑提取到另一个方法,比如methodB(),然后在复选框状态更改时调用methodB()
  • 听起来很有趣,但你能告诉我更多关于传递 KeyEvent 或提取逻辑是什么意思吗?您的意思是制作不同的方法并使用事件方法调用此方法吗??

标签: java swing methods jframe call


【解决方案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 不需要参数,而且您没有传入任何参数。

【讨论】:

  • 感谢你们两位,它可以按我的意愿工作。我已经对答案投票了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-02
  • 2023-02-20
相关资源
最近更新 更多