按下按钮时执行动作

时间:2012-11-06 02:06:51

标签: java swing jbutton actionlistener

好的,第一次问一个问题通常我可以找到这些快速搜索的答案,这个让我太沮丧了。 这是一个简单的小程序,花费数小时工作和支付率来获得毛额和净工资,大部分只是我的试运行(净支付金额等),但在我继续前进之前,我想让它运作起来。

按下按钮时没有任何反应,不确定为什么。 (最近,当我尝试这个 - 并且我开始在IE中获得NullPointerException时,可能与我的问题无关,但也只是把它扔出去。)任何帮助表示赞赏,我已经尝试了一些东西,但我肯定生锈的java!

继承人代码:

import javax.swing.*;      
import java.awt.*;     
import java.awt.event.*; 

public class ButtonGrossPay extends JApplet implements ActionListener
{

 private JTextField txtHourWork;
 private JTextField txtHourRate;
 private JLabel lblGrossPay;
 private JLabel lblNetPay;

  public void init () {
    Container content_pane = getContentPane ();
    content_pane.setLayout (new FlowLayout ());     

        JLabel lblHourWork = new JLabel("Hours Worked");
        JTextField txtHourWork = new JTextField(10);
        JLabel lblHourRate = new JLabel("Pay Rate");
        JTextField txtHourRate = new JTextField(10);


        JButton btnCalculate = new JButton("Calculate Pay");
        btnCalculate.addActionListener(this);

        content_pane.add (lblHourWork);
        content_pane.add(txtHourWork);
        content_pane.add(lblHourRate);
        content_pane.add(txtHourRate);
        content_pane.add(btnCalculate);
        content_pane.add(lblGrossPay);
        content_pane.add(lblNetPay);
        }

 public void actionPerformed (ActionEvent event) {

        String firstNumber = txtHourWork.getText();
        String secondNumber = txtHourRate.getText();

        int number1 = Integer.parseInt(firstNumber);
        int number2 = Integer.parseInt(secondNumber);

        int gross = number1 * number2; 


        double netPay = 0;
        if (gross >= 0 && gross <= 99.99) {
        netPay = gross - gross * .10;
    } else if (gross >= 99.99) {
        netPay = gross - gross * .20;
    }

    lblGrossPay.setText(Integer.toString(gross));
    lblNetPay.setText(Double.toString(netPay));

    }
}

2 个答案:

答案 0 :(得分:3)

您正在隐藏变量 - 在类的init()方法中重新声明它们,以便所有类JTextField都不会被初始化,因此为null。解决方案:不要这样做。

所以改成它:

public void init () {
    Container content_pane = getContentPane ();
    content_pane.setLayout (new FlowLayout ());     

    JLabel lblHourWork = new JLabel("Hours Worked");
    // JTextField txtHourWork = new JTextField(10);
    JLabel lblHourRate = new JLabel("Pay Rate");
    // JTextField txtHourRate = new JTextField(10);

    txtHourWork = new JTextField(10);
    txtHourRate = new JTextField(10);

答案 1 :(得分:0)

您永远不会初始化导致JLabels的{​​{1}} lblGrossPaylblNetPay。你应该:

NPE