无需按下按钮即可进行计算

时间:2018-03-25 23:57:20

标签: java button listener

我正在制作一个计算三个规则的程序,但是当我按下按钮但是添加了3个需要的值时,我不希望计算开始。这是我的程序和代码的图像:

enter image description here

private void calculateActionPerformed(java.awt.event.ActionEvent evt) {                                          
    if (field4.getText().isEmpty()) {
        field4.setText(null);
        field1c = Float.parseFloat(field1.getText());
        field2c = Float.parseFloat(field2.getText());
        field3c = Float.parseFloat(field3.getText());
        float result = (field3c * field2c) / field1c;
        String resultfinal = Float.toString(result);
        field4.setText(resultfinal);
        option = 1;
    } else if (field3.getText().isEmpty()) {
        field1c = Float.parseFloat(field1.getText());
        field2c = Float.parseFloat(field2.getText());
        field4c = Float.parseFloat(field4.getText());
        float result = (field4c * field1c) / field2c;
        String resultfinal = Float.toString(result);
        field3.setText(resultfinal);
        option = 2;
    } else if (field1.getText().isEmpty()) {
        field2c = Float.parseFloat(field2.getText());
        field3c = Float.parseFloat(field3.getText());
        field4c = Float.parseFloat(field4.getText());
        float result = (field3c * field2c) / field4c;
        String resultfinal = Float.toString(result);
        field1.setText(resultfinal);
        option = 3;
    } else if (field2.getText().isEmpty()) {
        field1c = Float.parseFloat(field1.getText());
        field3c = Float.parseFloat(field3.getText());
        field4c = Float.parseFloat(field4.getText());
        float result = (field4c * field1c) / field3c;
        String resultfinal = Float.toString(result);
        field2.setText(resultfinal);
        option = 4;
    }

我确定我必须在某个地方使用线程,但我不确定如何在我的程序中实现它们。

1 个答案:

答案 0 :(得分:-2)

首先对KeyListener的每个输入进行操作,以便他们知道您何时键入,按下或释放了一个键。每当您在任何输入上按或键入一个键时,循环遍历每个输入和.getValue(),如果多个键不同于“”,则不要计算。

首先创建一个实现KeyListener的类,以便输入可以使用它。

class LoopWhenTyped implements KeyListener{

        public void keyTyped(KeyEvent e) {
            for(Component actualComponent : e.getSource().getParent().getComponents){
                 //here's where you're looping
            }
        }

        public void keyPressed(KeyEvent e) {}

        public void keyReleased(KeyEvent e) {}

}

在包含GUI的类中,创建我们刚刚创建的类的实例。

private myKeyListener = new LoopWhenTyped();

您必须将此侦听器添加到每个输入:

field1.addKeyListener(myKeyListener);
field2.addKeyListener(myKeyListener);
field3.addKeyListener(myKeyListener);
field4.addKeyListener(myKeyListener);

e变量引用KeyEvent,所以e.getSource()返回触发该事件的任何内容,getParent()将返回保存该事件的组件,getComponents()返回它拥有的所有组件

当然,如果你迷路了,你必须将这个通用解决方案适应你的代码结构并对这些类进行一些研究。我希望它有所帮助。