好的所以我正在尝试创建一个带有两个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
}
}
答案 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);
}
}