Kalkulator [programowanie obiektowe]

0

Cześć,
uczę się dopiero Javy i mam pewien problem z prostym kalkulatorem. Netbeans nie wyrzuca mi żadnych błędów, mogę uruchomić program, ale nie działa tak jak powinien. Konkretnie:

  1. Program nie wykonuje działań (a przynajmniej nie potrafi wyświetlić ich wyniku). Przykładowo robię: liczba1 + liczba2, a po kliknięciu "Wynik" nic się nie dzieje.
    Jestem w zasadzie pewien (na pięć % ;) ), że ma to związek z "Proces", a mianowicie w jaki sposób to zadeklarowałem - "String Proces;".

  2. Po zmianie klasy "textarea" z JTextField na JLabel, nie wyświetla mi się okienko, w którym wpisywane są liczby. Nie bardzo wiem co zrobić, żeby to naprawić. Chcę, żeby została JLabel, żeby zablokować wpisywanie "z palca".

Zamieszczam kod programu, będę wdzięczny za podpowiedzi.

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.lang.Math;
import java.lang.Double;

public class KalkulatorSlowik2 implements ActionListener {
    
    JLabel textarea;
    JButton b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, bplus, bminus, biloczyn, biloraz, clear, bbackspace, brow ;
    
    double x,buf;
    String Proces;
    
    public void actionPerformed(ActionEvent action) { 
       Object target = action.getSource();
       
       if(target==b0 || target==b1  || target==b2 || target==b3 || target==b4 || target==b5 || target==b6 || target==b7 || target==b8 || target==b9)                                      
       {
           textarea.setText(textarea.getText()+((JButton)target).getText());
           textarea.requestFocus();                                    
       }                                                       
       else if(target==bplus) {
           buf=Double.parseDouble(textarea.getText());
           textarea.setText("+");
           textarea.requestFocus();
       }
       else if(target==bminus) {
           buf=Double.parseDouble(textarea.getText());
           textarea.setText("-");
           textarea.requestFocus();
       }
       else if(target==biloczyn) {
           buf=Double.parseDouble(textarea.getText());
           textarea.setText("*");
           textarea.requestFocus();
       }
       else if(target==biloraz) {
           buf=Double.parseDouble(textarea.getText());
           textarea.setText("/");
           textarea.requestFocus();
       }
       else if(target==clear) {
           textarea.setText("");
           textarea.requestFocus(); 
       }   
       else if(target==brow||target==textarea) 
       {
           Proces = textarea.getText().substring(0,1);
           x = Double.parseDouble(textarea.getText().substring(1));
           if(Proces.compareTo("+") == 0) {
               x = buf + x;
           }//end if +
         
           if(Proces.compareTo("-") == 0) {
               x = buf - x;
           }//end if -

           if(Proces.compareTo("*") == 0) {
               x = buf * x;
           }//end if *

           if(Proces.compareTo("/") == 0) {
               if(x != 0) {
                   x = buf / x;
               }
               else {
                   JOptionPane.showMessageDialog(null,"Nie wolno dzielić perzez zero!");
               }//end if /
               textarea.setText(Double.toString(x));
               textarea.requestFocus();
           }
       }
    }                     
    
    void init() {                                                                                                            
                                                                               
        JFrame f=new JFrame();                                                    
        Container c=f.getContentPane();                                                                       
        GridBagLayout gbl=new GridBagLayout();                                    
        GridBagConstraints gbc=new GridBagConstraints();                          
        gbc.fill=GridBagConstraints.HORIZONTAL;                                   
        c.setLayout(gbl);                                                         
// pole tekstowe ---------------------------------------------------------------     
        textarea=new JLabel();                                                         
        //textarea.addActionListener();                                               
        textarea.setHorizontalAlignment(JLabel.RIGHT);                              
        gbc.gridx=0; gbc.gridy=0; gbc.gridwidth=6; gbc.ipadx=0; gbc.ipady=10; gbc.insets=new Insets(5,5,0,0);                                           
        gbl.setConstraints(textarea,gbc);                                               
        c.add(textarea);
// button cyfry "0" -----------------------------------------------------------   
        b0=new JButton ("0");
        b0.addActionListener(this);
        b0.setFocusable(false);
        gbc.gridx=1; gbc.gridy=4; gbc.gridwidth=1; gbc.ipadx=0; gbc.ipady=0; gbc.insets=new Insets(5,0,0,0);
        gbl.setConstraints(b0,gbc);
        c.add(b0);
// button cyfry "1" -----------------------------------------------------------        
        b1=new JButton("1");
        b1.addActionListener(this);
        b1.setFocusable(false);
        gbc.gridx=0; gbc.gridy=1; gbc.gridwidth=1; gbc.ipadx=50; gbc.ipady=0; gbc.insets=new Insets(5,5,0,0);
        gbl.setConstraints(b1,gbc);
        c.add(b1);
// button cyfry "2" -----------------------------------------------------------
        b2=new JButton("2");
        b2.addActionListener(this);
        b2.setFocusable(false);
        gbc.gridx=1; gbc.gridy=1; gbc.gridwidth=1; gbc.ipadx=50; gbc.ipady=0; gbc.insets=new Insets(5,0,0,0);
        gbl.setConstraints(b2,gbc);
        c.add(b2);
// button cyfry "3" -----------------------------------------------------------
        b3=new JButton("3");
        b3.addActionListener(this);
        b3.setFocusable(false);
        gbc.gridx=2; gbc.gridy=1; gbc.gridwidth=1; gbc.ipadx=0; gbc.ipady=0; gbc.insets=new Insets(5,0,0,10);
        gbl.setConstraints(b3,gbc);
        c.add(b3);
// button cyfry "4" -----------------------------------------------------------    
        b4=new JButton("4");
        b4.addActionListener(this);
        b4.setFocusable(false);
        gbc.gridx=0; gbc.gridy=2; gbc.gridwidth=1; gbc.ipadx=0; gbc.ipady=0; gbc.insets=new Insets(5,5,0,0);
        gbl.setConstraints(b4,gbc);
        c.add(b4);
// button cyfry "5" -----------------------------------------------------------      
        b5=new JButton ("5");
        b5.addActionListener(this);
        b5.setFocusable(false);
        gbc.gridx=1; gbc.gridy=2; gbc.gridwidth=1; gbc.ipadx=0; gbc.ipady=0; gbc.insets=new Insets(5,0,0,0);
        gbl.setConstraints(b5,gbc);
        c.add(b5);
// button cyfry "6" -----------------------------------------------------------      
        b6=new JButton ("6");
        b6.addActionListener(this);
        b6.setFocusable(false);
        gbc.gridx=2; gbc.gridy=2; gbc.gridwidth=1; gbc.ipadx=0; gbc.ipady=0; gbc.insets=new Insets(5,0,0,10);
        gbl.setConstraints(b6,gbc);
        c.add(b6);
// button cyfry "7" -----------------------------------------------------------      
        b7=new JButton ("7");
        b7.addActionListener(this);
        b7.setFocusable(false);
        gbc.gridx=0; gbc.gridy=3; gbc.gridwidth=1; gbc.ipadx=0; gbc.ipady=0; gbc.insets=new Insets(5,5,0,0);
        gbl.setConstraints(b7,gbc);
        c.add(b7);
// button cyfry "8" -----------------------------------------------------------      
        b8=new JButton ("8");
        b8.addActionListener(this);
        b8.setFocusable(false);
        gbc.gridx=1; gbc.gridy=3; gbc.gridwidth=1; gbc.ipadx=0; gbc.ipady=0; gbc.insets=new Insets(5,0,0,0);
        gbl.setConstraints(b8,gbc);
        c.add(b8);
// button cyfry "9" -----------------------------------------------------------      
        b9=new JButton ("9");
        b9.addActionListener(this);
        b9.setFocusable(false);
        gbc.gridx=2; gbc.gridy=3; gbc.gridwidth=1; gbc.ipadx=0; gbc.ipady=0; gbc.insets=new Insets(5,0,0,10);
        gbl.setConstraints(b9,gbc);
        c.add(b9);
// button zerowania treści/wyniku w polu tekstowym -----------------------------    
        clear =new JButton ("Wyczyść");
        clear.addActionListener(this);
        clear.setFocusable(false);
        gbc.gridx=0; gbc.gridy=4; gbc.gridwidth=1; gbc.ipadx=0; gbc.ipady=0; gbc.insets=new Insets(5,5,0,0);
        gbl.setConstraints(clear ,gbc);
        c.add(clear );
// button usuwania treści w polu tekstowym -------------------------------------
        bbackspace =new JButton ("Cofnij");
        bbackspace.addActionListener(this);
        bbackspace.setFocusable(false);
        gbc.gridx=2; gbc.gridy=4; gbc.gridwidth=1; gbc.ipadx=0; gbc.ipady=0; gbc.insets=new Insets(5,0,0,10);
        gbl.setConstraints(bbackspace,gbc);
        c.add(bbackspace);
// button dodawania -----------------------------------------------------------  
        bplus=new JButton("+");
        bplus.addActionListener(this);
        bplus.setFocusable(false);
        gbc.gridx=5; gbc.gridy=1; gbc.gridwidth=1; gbc.ipadx=0; gbc.ipady=0; gbc.insets=new Insets(5,0,0,0);
        gbl.setConstraints(bplus,gbc);
        c.add(bplus);
// button odejmowania ----------------------------------------------------------       
        bminus=new JButton("-");
        bminus.addActionListener(this);
        bminus.setFocusable(false);
        gbc.gridx=5; gbc.gridy=2; gbc.gridwidth=1; gbc.ipadx=10; gbc.ipady=0; gbc.insets=new Insets(5,0,0,0);
        gbl.setConstraints(bminus,gbc);
        c.add(bminus);
// button mnożenia -----------------------------------------------------------      
        biloczyn=new JButton("*");
        biloczyn.addActionListener(this);
        biloczyn.setFocusable(false);
        gbc.gridx=5; gbc.gridy=3; gbc.gridwidth=1; gbc.ipadx=0; gbc.ipady=0; gbc.insets=new Insets(5,0,0,0);
        gbl.setConstraints(biloczyn,gbc);
        c.add(biloczyn);
// button dzielenia ------------------------------------------------------------      
        biloraz=new JButton("÷");
        biloraz.addActionListener(this);
        biloraz.setFocusable(false);
        gbc.gridx=5; gbc.gridy=4; gbc.gridwidth=1; gbc.ipadx=10; gbc.ipady=0; gbc.insets=new Insets(5,0,0,0);
        gbl.setConstraints(biloraz,gbc);
        c.add(biloraz);
// button "Wynik" prezentujący wynik działania ---------------------------------
        brow=new JButton("Wynik");
        brow.addActionListener(this);
        brow.setFocusable(false);
        gbc.gridx=5; gbc.gridy=5; gbc.gridwidth=1; gbc.ipadx=0; gbc.ipady=40; gbc.insets=new Insets(20,0,0,0);
        gbl.setConstraints(brow,gbc);
        c.add(brow);

        
        f.pack();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setTitle("Kalkulator");
        f.setVisible(true);
        f.setSize(450, 330);
    }
    
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new KalkulatorSlowik2().init();
                
            }
        });
    }
}
3

Aż oczy od tego bolą.Skasuj to bo ten kod sie do niczego nie nadaje.
Lekcja na dziś:

  • tablice
  • pętle
1

Kod spaghetti. Mhmmmmm.

0

Jedna z możliwości skrócenia kodu.

ActionListener cyfry = new ActionListener()
{
    public void actionPerformed(ActionEvent ae)
    {
        textarea.setText(textarea.getText()+ae.getActionCommand());
        //textarea.requestFocus(); po co Ci fokus na napisie?
    }
};
JPanel panelCyfr = new JPanel();
panelCyfr.setLayout(new GridLayout(4,3,5,5));
for(int i=1;i<=9;i++)
{
    JButton b = new JButton(""+i);
    panelCyfr.add(b);
    b.addActionListener(cyfry);
}
panelCyfr.add(new JLabel("")); //żeby przycisk z zerem był na środku dolnego rzędu
JButton b = new JButton("0");
panelCyfr.add(b);
b.addActionListener(cyfry);                
add(panelCyfr);
0

Lepiej zrób kalkulator ONP z wpisywaniem wyrażeń z fizycznej klawiatury do jakiegoś Edita, zamiast serią JButtonów :D

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