Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaGUI计算器不会进行计算_Java_User Interface - Fatal编程技术网

JavaGUI计算器不会进行计算

JavaGUI计算器不会进行计算,java,user-interface,Java,User Interface,好的,我正在尝试创建一个简单的计算器,其中两个JTextField代表两个数字,三个复选框,这样用户可以选择sum、difference或multiply,a(Kryej Veprim)(这样,当点击此按钮时,如果用户在另一个JTextField结果(rezultati)中选中“shuma”,则会显示这两个数字的和)。 我知道有些事情完全错了,因为我无法将复选框与“kryejveprim”按钮连接起来。有什么帮助吗? 注意(当我运行此代码时,我会写数字,但当我选中复选框或单击按钮时,不会发生任何

好的,我正在尝试创建一个简单的计算器,其中两个JTextField代表两个数字,三个复选框,这样用户可以选择sum、difference或multiply,a(Kryej Veprim)(这样,当点击此按钮时,如果用户在另一个JTextField结果(rezultati)中选中“shuma”,则会显示这两个数字的和)。 我知道有些事情完全错了,因为我无法将复选框与“kryejveprim”按钮连接起来。有什么帮助吗? 注意(当我运行此代码时,我会写数字,但当我选中复选框或单击按钮时,不会发生任何事情)


从您的代码来看,当按下“计算”(
veprimi
)按钮时,您似乎从未实际执行过任何操作。因此,是否可以将其添加到您的
actionPerformed
方法中

比如:

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

此外,您从未为复选框注册任何
ItemChangeListener
,因此该方法从未被调用。

您混淆了将ActionListener放置在何处-它们属于您期望操作的按钮和属于复选框的ItemListener等组件。一旦您对其进行排序,您的代码将工作。此代码将l如果按下任何操作或结果按钮,则更新结果

工作代码:

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);
}
}

嗯,在代码的最后,您有一个空的
actionPerformed()
方法。这让我觉得您可能没有正确地填写该方法。如果我删除它,结果是-->类型计算器必须实现继承的抽象方法ActionListener.actionPerformed(ActionEvent)但是为什么它是空的呢?你有两个
public void actionperformed(ActionEvent e)
。你不需要这两个都在里面,这可能就是你没有得到想要的东西的原因。我删除了空的public void actionperformed(ActionEvent e)但是仍然无法工作。我不知道如何做这一部分,当点击按钮时,程序将检查选中的复选框,并根据复选框给出结果:/I我是新来的,我在网上看到了不同的教程,但都没有帮助哇,非常感谢,伙计。如果你不介意的话,只问一个问题。有没有办法让结果不会出现在我单击按钮之前显示?我的意思是,例如,我检查JCheckBox shuma,但除非我单击按钮,否则结果上将不会显示任何内容。是的,没问题。您可以删除ItemListener,以便选择shuma时不会发生任何事情。注释掉行shuma.addItemListener()…让我知道它是如何进行的。当然,对其他两个操作也要这样做。这会使itemStateChanged(ItemEvent e)不必要。如果可能的话,你能帮我一下吗?这有点类似。我有两个复选框,两种颜色和一个按钮来完成操作。当我选中复选框并单击按钮时,整个帧的前景颜色应该根据该颜色改变。-->JCheckBox kuqe,blu;JButton veprimi,ok;public Ngjyra(){setLayout(new FlowLayout());kuqe=new JCheckBox(“kuqe”);add(kuqe);kuqe.addActionListener(this);…对于所有其他三个组件都是一样的}public void actionPerformed(ActionEvent e){if(e.getSource()==veprimi){if(kuqe.isSelected()){setForeground(Color.RED)}else if(blu.isSelected()){setForeground(Color.BLUE)}无法再发布问题已达到我的极限:/
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);
}
}