ammu23 Ответов: 2

программа калькулятора с использованием java swing


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class Awt implements ActionListener
{
	JFrame f;
	JButton b1,b2,b3,b4,b5;
	JTextField t1,t2,t3;
	JLabel l,l1;
	Awt()
	{
		f=new JFrame("Listener");
		t1=new JTextField("             ");
		t2=new JTextField("             ");
		t3=new JTextField("             ");
		b1=new JButton("Add");
		b2=new JButton("Sub");
		b3=new JButton("Mul");
		b4=new JButton("Div");
		l=new JLabel();
		l1=new JLabel();
	}
	public void awt1()
	{
		f.setLayout(new GridLayout(3,2));
		f.setVisible(true);
		f.add(t1);
		f.add(t2);
		f.add(t3);
		f.add(b1);
 		f.add(b2);
		f.add(b3);
		f.add(b4);
		f.add(l);
		f.add(l1);
		b1.addActionListener(this);
		b2.addActionListener(this);
		b3.addActionListener(this);
		b4.addActionListener(this);
		f.pack();
	}
	public void actionPerformed(ActionEvent e)
	{
		String s=new String(e.getActionCommand());
		l.setText(s);
		if((s).equals("Add"))
		{
			int  a=Integer.parseInt(t1.getText());
			int b=Integer.parseInt(t2.getText());
			Integer c=a+b;
                        t3.setText(c.toString());

		}
		else if((s).equals("Sub"))
		{
			int a=Integer.parseInt(t1.getText());
			int b=Integer.parseInt(t2.getText());
			Integer c=a-b;
			t3.setText(c.toString());
	
		}
		else if((s).equals("Mul"))
		{
			int a=Integer.parseInt(t1.getText());
			int b=Integer.parseInt(t2.getText());
			Integer c=a*b;
			t3.setText(c.toString());
		}
	}
	
	public static void main(String args[])
	{
		Awt a=new Awt();
		a.awt1();
	}
}


Привет..
Этот код работает успешно, но когда я ввел ввод и нажал кнопку, произошло исключение числового формата. Я не знаю, где я допустил ошибку, пожалуйста, найдите эту логическую ошибку в этом коде.
Пожалуйста, помогите мне.

Abhinav S

Исправлены предварительные метки.

Richard MacCutchan

Я понятия не имею, почему этот вопрос был проголосован 1 раз, но я дал ему 5, чтобы компенсировать это. Там действительно есть несколько глупых людей.

Nagy Vilmos

Исправлена типизация - все заглавные буквы считаются грубыми.

Member 9355851

Братан,ты еще не вызвал функцию actionPerformed ()!!!как он будет выполнять эти операции без логики!!#нуб

Member 9124911

Взрывается, потому что в строке, возвращаемой функцией getText (), есть пробелы ... простое добавление .trim() к каждому getText() исправляет это. Кроме того, нет никакой передачи для разделения. Но это хорошее, простое приложение для качания.

2 Ответов

Рейтинг:
1

Richard MacCutchan

Строк, возвращаемых getText() содержат конечные пробелы, которые parseInt() возражает против этого. Измените свой код на что-то вроде:

String stemp = t1.getText().trim();
int  a=Integer.parseInt(stemp);


Рейтинг:
1

nameJulian

В качестве незначительного совета. Почему вы инициализировали свои текстовые поля таким количеством пробелов? Если вы хотите, чтобы текстовые поля были пустыми, просто инициализируйте их следующим образом:

JTextField myTextField=new JTextField("");


Таким образом, компилятор знает, что текстовые поля должны быть пустыми. И таким образом, вам не понадобится метод trim() при разборе значения из текстовых полей.

А также в методе actionPerformed() с получением имени события, скорее всего, я бы просто использовал:
   if(e.getSource()==bt1){

     //do something -> add, mul etc.
}


Кроме этого, код кажется прекрасным.

С уважением.