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