Kalkulator [programowanie obiektowe]

Kalkulator [programowanie obiektowe]
  • Rejestracja: dni
  • Ostatnio: dni
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.

Kopiuj
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();
                
            }
        });
    }
}
Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
3

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

  • tablice
  • pętle
  • Rejestracja: dni
  • Ostatnio: dni
1

Kod spaghetti. Mhmmmmm.

bogdans
  • Rejestracja: dni
  • Ostatnio: dni
0

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

Kopiuj
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);
Spine
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6968
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.