Kalkulator okienkowy w Javie

0

Cześć wszystkim

Muszę napisać kalkilator w Javie. Ma on wyglądać podobnie do kalkulatora z systemu Windows. Mam już dodane wszystkie przyciski oraz pole JTextField w którym będą wyświetlane wybrane liczby i wynik wg szablonu: liczba1+liczba2=wynik.
Nie wiem jednak w jaki sposób pobrać który przycisk został wciśnięty i jak wpisać go do pola JFieldText. Poniżej wstawiam Wam kod który jak na razie opracowałem.

import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.util.Scanner;
import javax.swing.*;
import java.awt.*;
import java.awt.BasicStroke;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import java.awt.event.*;

public class Program2 {

    /**
     * @param args
     */
    public static void main(String[] args) 
    {
        Scanner in = new Scanner(System.in);

        SmpWindow2 wnd = new SmpWindow2();
        wnd.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        wnd.setVisible(true);
        wnd.setBounds( 70, 70, 500, 450);
        wnd.setTitle( "Kalkulator" );
    }

}

class DrawWndPane2 extends JPanel implements ActionListener
{

   JButton button1;
   JButton button2;
   JButton button3;
   JButton button4;
   JButton button5;
   JButton button6;
   JButton button7;
   JButton button8;
   JButton button9;
   JButton button0;
   JButton dodawanie;
   JButton odejmowanie;
   JButton mnozenie;
   JButton dzielenie;
   JButton buttonrownania;
   JButton kasowanie;
   JTextField OknoWynik;
   
   
   String  message;
   DrawWndPane2()
   {
       super();
           
       // Wyłączanie automatycznego pozycjonowania komponentów
       setLayout( null );
           
       // Utworzenie komponentów i dodanie ich do panelu okna
      
       OknoWynik = new JTextField(" ");
       button1 = new JButton( "1" );
       button2 = new JButton( "2" );
       button3 = new JButton( "3" ); 
       button4 = new JButton( "4" );
       button5 = new JButton( "5" );
       button6 = new JButton( "6" );
       button7 = new JButton( "7" );
       button8 = new JButton( "8" );
       button9 = new JButton( "9" );
       button0 = new JButton( "0" );
       buttonrownania = new JButton("=");
       dodawanie = new JButton("+");
       odejmowanie = new JButton("-");
       mnozenie = new JButton("*");
       dzielenie = new JButton("/");
       kasowanie = new JButton("C");
       button1.setBounds( 100, 100, 70, 30 );
       button2.setBounds( 190, 100, 70, 30 );
       button3.setBounds( 280, 100, 70, 30 ); 
       button4.setBounds( 100, 150, 70, 30 );
       button5.setBounds( 190, 150, 70, 30 );
       button6.setBounds( 280, 150, 70, 30 );
       button7.setBounds( 100, 200, 70, 30 );
       button8.setBounds( 190, 200, 70, 30 );
       button9.setBounds( 280, 200, 70, 30 );
       button0.setBounds( 190, 250, 70, 30 );
       kasowanie.setBounds(100,250,70,30);
       buttonrownania.setBounds(280,250,70,30);
       dodawanie.setBounds(360,100,70,30);
       odejmowanie.setBounds(360,150,70,30);
       mnozenie.setBounds(360,200,70,30);
       dzielenie.setBounds(360,250,70,30);
       OknoWynik.setBounds(25,25,400,50);
       
       add( button1 );
       add( button2 );
       add( button3 );
       add (button4);
       add (button5);
       add (button6);
       add (button7);
       add (button8);
       add (button9);
       add (button0);
       add (buttonrownania);
       add (dodawanie);
       add (odejmowanie);
       add (mnozenie);
       add (dzielenie);
       add (OknoWynik);
       add (kasowanie);
       
       message = "Nie nacisnieto zadnego przycisku";
          
       // Dodawanie słuchacza zdarzeń - tego samego dla wszystkich przycisków
       button1.addActionListener( this );
       button2.addActionListener( this );
       button3.addActionListener( this );   
       button4.addActionListener( this );
       button5.addActionListener( this );
       button6.addActionListener( this );
       button7.addActionListener( this );
       button8.addActionListener( this );
       button9.addActionListener( this );
       button0.addActionListener( this );
   }
   
   public void paintComponent( Graphics g)
   {
       super.paintComponent(g);
   }
   
   public void actionPerformed( ActionEvent event)
   {
} 
}

class SmpWindow2 extends JFrame  
{
    
    public SmpWindow2()
    {       
        // Pozyskanie dostepu do powierzchni rysowania okna
        Container  contents = getContentPane();
        contents.add( new DrawWndPane2() );     
    }

}

dodane znaczniki <code class="java"> - fp

0

Dodajesz listenera, którego masz pustego, po drugie dodajesz tego samego listenera dla każdego buttonu.
http://pastebin.com/tNUGUP5s
tu łap gotowy prosty kalkulator, layout jest obrzydliwy, ale może coś ci rozjaśni

0

Hej!

Jeżeli chodzi Ci po głowie podobny kalkulatorek do tego...

Kalkulatorek.jpg

...to składa się z trzech klas.

  1. KalkulatorUI
  2. Kropka
  3. Priorytet

Tutaj możesz przejrzeć sobie ich kod:

http://pastebin.com/iVmc9Ffc <- klasa KalkulatorUI
http://pastebin.com/9WzV0fcR <- Kropka
http://pastebin.com/ivfh3DPq <- Priorytet

Sam kalkulator obsługuje nawiasy, kasowanie po jednym elemencie wprowadzanego działania, potęgowanie, pierwiastkowanie (tylko kwadratowe) itd. Można się pobawić. Przy wypluwaniu wyniku korzysta z odwróconej notacji polskiej. Znajdziesz ją w kodzie pod akcją przycisku "=".

Może coś Ci się z tego przyda.

Pozdrawiam serdecznie!

0

Słuchacza trzeba dodać do wszystkich przycisków - nie tylko do tych odpowiedzialnych za cyfry.
Rozpoznawanie przycisku można zrobić tak (wymaga Javy 7, dla wcześniejszych wersji potrzebne są drobne zmiany):

public void actionPerformed(ActionEvent ae)
{
     String cmd = ae.getActionCommand();
     switch(cmd)
     {
          case "C":
           OknoWynik.setText("");
           break;
          case "=":
           //obliczenia
           break;
          default:
           OknoWynik.setText(input.getText()+cmd);
     }
}

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