Java GUI计算器不会进行计算

时间:2018-02-10 20:45:25

标签: java user-interface

好的所以我正在尝试创建一个带有两个JTextField的简单计算器,用于两个数字,三个CheckBoxes,因此用户可以选择sum,difference或multiply,a(Kryej Veprim(这样当用户点击此按钮时)检查" shuma"在另一个JTextField结果(rezultati)将显示这两个数字的总和)。 我知道有些事情是完全错误的,因为我无法将复选框连接到" kryejveprim" button.Any帮助? P.s(当我运行此代码时,我会写数字,但是当我选中复选框或单击按钮时没有任何反应)

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

public class Calculator extends JFrame implements ActionListener,ItemListener{


JTextField numri1,numri2;
JCheckBox shuma,diferenca,shumezimi;
JButton veprimi,ok;
JTextField rezultati;
double n1,n2;
String n1tekst,n2tekst;

public Calculator(){
    setLayout(new FlowLayout());

    numri1=new JTextField(10);
    add(numri1);

    numri2=new JTextField(10);
    add(numri2);

    shuma=new JCheckBox("Shuma");
    add(shuma);

    diferenca=new JCheckBox("Diferenca");
    add(diferenca);

    shumezimi=new JCheckBox("Shumezimi");
    add(shumezimi);

    veprimi=new JButton("Kryej Veprimin");
    add(veprimi);

    rezultati=new JTextField(10);
    add(rezultati);

    ok=new JButton("OK");
    add(ok);

    numri1.addActionListener(this);
    numri2.addActionListener(this);
    rezultati.addActionListener(this);
}

public void actionPerfomed(ActionEvent e) {
    if (e.getSource()==numri1)
    {
        n1tekst=e.getActionCommand();
        n1=Double.parseDouble(n1tekst);
        }

    else if(e.getSource()==numri2) 
    {
        n2tekst=e.getActionCommand();
        n2=Double.parseDouble(n2tekst);
    }
}
public void itemStateChanged( ItemEvent e )

{

 if (e.getSource() == shuma)
   {
     String rez = shuma.isSelected() ? ""+(n1+n2) : "";
     rezultati.setText(rez);
   }
 else if (e.getSource() == diferenca)
 {
   String rez = diferenca.isSelected() ? ""+(n1-n2) : "";
   rezultati.setText(rez);
 }
 else if (e.getSource() == shumezimi)
 {
   String rez = shumezimi.isSelected() ? ""+(n1*n2) : "";
   rezultati.setText(rez);
 }
}
public static void main (String args[])

{

 Calculator ob = new Calculator();
 ob.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 ob.setSize(900,900);
 ob.setVisible(true);

}

@Override
public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub

}

}

2 个答案:

答案 0 :(得分:0)

在您的代码中,当按下计算(veprimi)按钮时,您似乎永远不会执行任何操作。那么可以在actionPerformed方法中添加它?

类似的东西:

  .... 
   if(e.getSource().equals(veprimi) {
      // calculate value and set result TextField
   } 
   .... 

此外,您永远不会为复选框注册任何ItemChangeListener,因此永远不会调用该方法。

答案 1 :(得分:0)

您对ActionListeners的放置位置感到困惑 - 它们属于您希望操作的按钮等组件,以及属于复选框的ItemListeners。一旦你对它进行排序,你的代码就可以了。如果您按下任何操作或结果按钮,此代码将更新结果。

工作代码:

public class Calculator extends JFrame implements ActionListener, ItemListener {

JTextField numri1, numri2;
JCheckBox shuma, diferenca, shumezimi;
JButton veprimi, ok;
JTextField rezultati;
double n1, n2;
String n1tekst, n2tekst;

public Calculator() {
    setLayout(new FlowLayout());

    numri1 = new JTextField(10);
    add(numri1);

    numri2 = new JTextField(10);
    add(numri2);

    shuma = new JCheckBox("Shuma");
    add(shuma);
    shuma.addItemListener(this);

    diferenca = new JCheckBox("Diferenca");
    add(diferenca);
    diferenca.addItemListener(this);

    shumezimi = new JCheckBox("Shumezimi");
    add(shumezimi);
    shumezimi.addItemListener(this);

    veprimi = new JButton("Kryej Veprimin");
    add(veprimi);
    veprimi.addActionListener(this);

    rezultati = new JTextField(10);
    add(rezultati);

    ok = new JButton("OK");
    add(ok);

}

public void itemStateChanged(ItemEvent e) {
    n1 = Double.parseDouble(numri1.getText());
    n2 = Double.parseDouble(numri2.getText());
    if (e.getSource() == shuma) {
        String rez = shuma.isSelected() ? "" + (n1 + n2) : "";
        rezultati.setText(rez);
    } else if (e.getSource() == diferenca) {
        String rez = diferenca.isSelected() ? "" + (n1 - n2) : "";
        rezultati.setText(rez);
    } else if (e.getSource() == shumezimi) {
        String rez = shumezimi.isSelected() ? "" + (n1 * n2) : "";
        rezultati.setText(rez);
    }
}

@Override
public void actionPerformed(ActionEvent e) {
    if (e.getSource() == veprimi) {
        n1 = Double.parseDouble(numri1.getText());
        n2 = Double.parseDouble(numri2.getText());
        if (shuma.isSelected()) {
            rezultati.setText("" + (n1 + n2));
        } else if (diferenca.isSelected()) {
            rezultati.setText("" + (n1 - n2));
        } else if (shumezimi.isSelected()) {
            rezultati.setText("" + (n1 * n2));
        }
    }
}

public static void main(String args[])

{
    Calculator ob = new Calculator();
    ob.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    ob.setSize(900, 900);
    ob.setVisible(true);
}

}

按下按钮后,基于复选框更改背景颜色的Java类:

public class Ngjyra extends JFrame implements ActionListener {

JCheckBox kuqe, blu;
JButton veprimi, ok;

public Ngjyra() {
    setLayout(new FlowLayout());
    kuqe = new JCheckBox("Kuqe");
    add(kuqe);
    blu = new JCheckBox("Blu");
    add(blu);

    veprimi = new JButton("Kryej Veprimin");
    add(veprimi);
    veprimi.addActionListener(this);

}

public void actionPerformed(ActionEvent e) {
    if (e.getSource() == veprimi) {
        if (kuqe.isSelected()) {
            this.getContentPane().setBackground(Color.RED);
        } else if (blu.isSelected()) {
            this.getContentPane().setBackground(Color.BLUE);
        }
    }

}

public static void main(String args[])

{
    Ngjyra ob = new Ngjyra();
    ob.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    ob.setSize(900, 900);
    ob.setVisible(true);
}
}