Kalkulator [swing]

0

Witam, mam taki problem, może ktoś będzie miał pomysł jak go rozwiązać? Chodzi oczywiście o wynik różnych działań, poprzestałem na + , dalej nie mam pomysłu.
Dzieki

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class kalk extends JFrame implements ActionListener {

	JButton B1, B2, B3, B4, B5, B6, B7, B8, B9, Ba, Bb, Bc, Bd, Be, B0;
	JTextField TextField;
	public int a, b,c, wynik, wynik2;
	
	public kalk(){
			
		setSize(350,350);
		setTitle("MegaProg");
		
		B1 = new JButton();
		setLayout(null);
		B1.setBounds(50, 70, 45, 45);
		B1.setText("1");
		add(B1);
		B1.addActionListener(this);
		
		B2 = new JButton();
		setLayout(null);
		B2.setBounds(90, 70, 45, 45);
		B2.setText("2");
		add(B2);
		B2.addActionListener(this);
		
		B3 = new JButton();
		setLayout(null);
		B3.setBounds(130, 70, 45, 45);
		B3.setText("3");
		add(B3);
		B3.addActionListener(this);
		
		B4 = new JButton();
		setLayout(null);
		B4.setBounds(50, 120, 45, 45);
		B4.setText("4");
		add(B4);
		B4.addActionListener(this);
		
		B5 = new JButton();
		setLayout(null);
		B5.setBounds(90, 120, 45, 45);
		B5.setText("5");
		add(B5);
		B5.addActionListener(this);
		
		B6 = new JButton();
		setLayout(null);
		B6.setBounds(130, 120, 45, 45);
		B6.setText("6");
		add(B6);
		B6.addActionListener(this);
		
		B7 = new JButton();
		setLayout(null);
		B7.setBounds(50, 170, 45, 45);
		B7.setText("7");
		add(B7);
		B7.addActionListener(this);
		
		B8 = new JButton();
		setLayout(null);
		B8.setBounds(90, 170, 45, 45);
		B8.setText("8");
		add(B8);
		B8.addActionListener(this);
		
		B9 = new JButton();
		setLayout(null);
		B9.setBounds(130, 170, 45, 45);
		B9.setText("9");
		add(B9);
		B9.addActionListener(this);
		
		B0 = new JButton();
		setLayout(null);
		B0.setBounds(90, 220, 43, 43);
		B0.setText("0");
		add(B0);
		B0.addActionListener(this);
		
		Ba = new JButton();
		setLayout(null);
		Ba.setBounds(200, 70, 45, 45);
		Ba.setText("+");
		add(Ba);
		Ba.addActionListener(this);
		
		Bb = new JButton();
		setLayout(null);
		Bb.setBounds(250, 70, 45, 45);
		Bb.setText("-");
		add(Bb);
		Bb.addActionListener(this);
		
		Bc = new JButton();
		setLayout(null);
		Bc.setBounds(200, 120, 45, 45);
		Bc.setText("*");
		add(Bc);
		Bc.addActionListener(this);
		
		Bd = new JButton();
		setLayout(null);
		Bd.setBounds(200, 170, 45, 45);
		Bd.setText("/");
		add(Bd);
		Bd.addActionListener(this);
		
		Be = new JButton();
		setLayout(null);
		Be.setBounds(200, 220, 45, 45);
		Be.setText("=");
		add(Be);
		Be.addActionListener(this);
		
		TextField = new JTextField("");
		TextField.setBounds(50, 20, 245, 40);
		add(TextField);
	
		
	}


	

@Override
	public void actionPerformed(ActionEvent e) {
		
		//Bb.addActionListener(this);
		//Bc.addActionListener(this);
		//Bd.addActionListener(this);
		//Be.addActionListener(this);
		
	
	
		Object źródło = e.getSource();
		if(źródło==B1){
			TextField.setText(TextField.getText()+"1");
			
		}
		
		else if(źródło==B2){
			TextField.setText(TextField.getText()+"2");
		}
		
		else if(źródło==B3){
			TextField.setText(TextField.getText()+"3");
		}
		
		else if(źródło==B4){
			TextField.setText(TextField.getText()+"4");
		}

		else if(źródło==B5){
			TextField.setText(TextField.getText()+"5");
		}
		
		else if(źródło==B6){
			TextField.setText(TextField.getText()+"6");
		}
		
		else if(źródło==B7){
			TextField.setText(TextField.getText()+"7");
		}
		
		else if(źródło==B8){
			TextField.setText(TextField.getText()+"8");
		}
		
		else if(źródło==B9){
			TextField.setText(TextField.getText()+"9");
		}
	
		else if(źródło==B0){
			TextField.setText(TextField.getText()+"0");
		}
		
		else if(źródło==Ba){
			//TextField.setText(TextField.getText()+"+");
			 a = Integer.parseInt(TextField.getText());
			 TextField.setText("");
			
			//b = Integer.parseInt(TextField.getText());
			//	wynik += a;
		}	
			
			
		else if(źródło==Bb){	
			//TextField.setText(TextField.getText()+"-");
			c = Integer.parseInt(TextField.getText());
			TextField.setText("");
		}
		
		else if(źródło==Bc){
			TextField.setText(TextField.getText()+"*");
		}
		
		else if(źródło==Bd){
			TextField.setText(TextField.getText()+"/");
		}
		
		else if(źródło==Be || źródło==Ba){
			//TextField.setText(TextField.getText()+"=");
			b = Integer.parseInt(TextField.getText());
		
			//if(źródło==Ba)	
				wynik = a+b;
				TextField.setText(Integer.toString(wynik));	
		}
		
}
		
		
		
		





public static void main(String[] args){
	
	
	kalk celsjusz1 = new kalk();
	
	celsjusz1.setVisible(true);
	



}
}	
0

A teraz wyobraź sobie że chcesz zrobić kalkulator który ma klawisze dla liczb od 0 do 1000. Czy napisałbyś to tak samo jak teraz? No własnie. Skasuj to i napisz jeszcze raz, tym razem z głowa.

0

Wystarczy mi, że będzie miał klawisze od 0 do 9 :P Tyle czasu nad tym spędziłem, że wolałbym nie pisać znowu od nowa. Zwłaszcza, że robie ten program dla własnej satysfakcji.

0

Tym bardziej proponuje napisać go poprawnie. Używając tablic, pętli oraz mózgu.

0

Wiadomo, tylko to był moim zdaniem najprostszy sposób zrobienia tego programu, no chyba że ktoś mnie oświeci i naprowadzi na dobrą drogę, to z ukłonem zrobię to na nowo ;)

0

Nie mogę sobie poradzić z umieszczeniem JButtonów w tablicy, potem by je samoczynnie rozmieściło. Kombinowałem coś z panelami ale skutek mizerny :c

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


public class kalk2x extends JFrame implements ActionListener{

	public int i;
	
	JButton[] tablica = new JButton[10];
	
	public kalk2x(){
	
	setSize(350,350);
try{
	for(i=0; i<10; i++)
	tablica[i] = new JButton();
	tablica[i].setBounds(50+i++, 50+i--, 50, 50);
	add(tablica[i]);
	tablica[i].setLayout(null);
}catch(ArrayIndexOutOfBoundsException e){
	System.out.println("Cos nie dziala");
}
	}

	



public void actionPerformed(ActionEvent e) {
		
}

public static void main(String[] args){
	
	kalk2x ramka = new kalk2x();
	ramka.setVisible(true);
		
}
}
0

Ja bym nie wrzucał wszystkich przycisków do jednej tablicy, wygodnie chyba będzie mieć w jednej przyciski z cyframi, w drugiej z działaniami. Masz kod z cyframi.

        JButton[] cyfry = new JButton[10]; 
 
        public kalk(){
 
                setSize(350,350);
                setTitle("MegaProg");
                setLayout(null);
                JPanel panelCyfr = new JPanel();
                panelCyfr.setLayout(new GridLayout(4,3,5,5));
                for(int i=1;i<=9;i++)
                {
                    JButton b = new JButton(""+i);
                    cyfry[i-1] = b;
                    panelCyfr.add(b);
                    b.addActionListener(this); //przydałby się wyspecjalizowany actionListener
                }
                panelCyfr.add(new JLabel(""));
                JButton b = new JButton("0");
                cyfry[0] = b;
                panelCyfr.add(b);
                b.addActionListener(this);                
                panelCyfr.add(new JLabel(""));
                panelCyfr.setBounds(50,70,145,195);
                add(panelCyfr);

                //... tu pozostałe przyciski 
                TextField = new JTextField(""); //głupia nazwa, tak się nazywa standardowa klasa w bibliotece AWT, może się mylić
                TextField.setBounds(50, 20, 245, 40);
                add(TextField);
                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //tego Ci brakowało
        }
        //listener do obsługi przycisków z cyframi
        public void actionPerformed(ActionEvent ae)
        {
              TextField.setText(TextField.getText()+ae.getActionCommand());
        }

1 użytkowników online, w tym zalogowanych: 0, gości: 1