Część 5.4. Przykład
Na zakończenie kursu przykład użytkowego programu w Javie. Poniżej masz gotowy kod kalkulatora, który oprócz czterech podstawowych działań liczy również odwrotności liczb i pierwiastki. Analizę kodu programu przeprowadź samodzielnie. Po dokładnym przerobieniu tej części kursu nie powinno to stanowić większego problemu. Możesz po tym pokusić się o rozbudowanie kalkulatora o dodatkowe działania (np.: funkcje trygonometryczne lub ex). import java.awt.*; import java.awt.event.*; public class Kalkulator extends Frame implements WindowListener, ActionListener { double iTemp = 0.0; char operator = '!'; boolean nowaLiczba = true; Label lblWartosc = new Label("0.0", Label.RIGHT); public Kalkulator() { super ( ); int x = 10, y = 100; String napisy = new String("789* 456/ 123+ 0 -="); addWindowListener(this); setSize(265, 283); setResizable(false); setTitle("Kalkulator"); setBackground(Color.lightGray); for (int i=0 ; i<20; i++) { if (i == 4) { ButtonSet("1/x", x, y); } else if (i == 9) { ButtonSet("sqrt", x, y); } else if (i == 14) { ButtonSet("-/+", x, y); } else { ButtonSet(napisy.substring(i,i+1), x, y); } if ((i+1) % 5 != 0 ) x += 45; else { x = 10; y += 45; } if (i==14 ) { i += 3; x += 135;} if ((i+1) % 5 == 3 ) { x += 20; } } Button btn = new Button("C"); btn.setFont(new Font(null, Font.BOLD, 20)); btn.setForeground(Color.blue); btn.setBounds(165,66,85,30); btn.addActionListener(this); this.add(btn); btn = new Button("0"); btn.setFont(new Font(null, Font.BOLD, 20)); btn.setForeground(Color.blue); btn.setBounds(10,235,85,40); btn.addActionListener(this); this.add(btn); btn = new Button(","); btn.setFont(new Font(null, Font.BOLD, 20)); btn.setForeground(Color.blue); btn.setBounds(100,235,40,40); btn.addActionListener(this); this.add(btn); lblWartosc.setBounds(10, 30, 245, 26); lblWartosc.setForeground(Color.black); lblWartosc.setBackground(Color.white); lblWartosc.setFont(new Font("Serif",Font.BOLD,24)); this.add(lblWartosc); setVisible(true); } void zeruj() { iTemp = 0.0; operator = '!'; nowaLiczba = true; lblWartosc.setText("0.0"); } public void actionPerformed (ActionEvent e) { String command = e.getActionCommand(); String cyfry = "0123456789"; String dzialania = "*/+-"; Double d; double d1; int x; if (command.equals("C")) { zeruj(); } if (lblWartosc.getText().equalsIgnoreCase("###############")) { return; } d = new Double(lblWartosc.getText()); if (cyfry.indexOf(command)!= -1) { if (!nowaLiczba) { if (lblWartosc.getText().length() >= 19) return; if (lblWartosc.getText().equals("0.0")) lblWartosc.setText(command); else lblWartosc.setText(lblWartosc.getText() + command); } else { lblWartosc.setText(command); nowaLiczba = false; } } else if (command.equals(",")) { if (!nowaLiczba) { if (lblWartosc.getText().indexOf('.') == -1 || lblWartosc.getText().equals("0.0")) { if (lblWartosc.getText().equals("0.0")) lblWartosc.setText("0."); else lblWartosc.setText(lblWartosc.getText() + "."); } } else { lblWartosc.setText("0."); nowaLiczba = false; } } else if (command.equals("-/+")) { if (!lblWartosc.getText().equals("0.0")) { d1 = -1 * d.doubleValue(); lblWartosc.setText(""+d1); if (lblWartosc.getText().indexOf('.') == -1) lblWartosc.setText(lblWartosc.getText().substring(0, lblWartosc.getText().length()-2)); iTemp = d1; nowaLiczba = true; } } else if (command.equals("1/x")) { if (d.doubleValue() == 0.0) { lblWartosc.setText("###############"); } else { d1 = 1 / d.doubleValue(); lblWartosc.setText(""+d1); x = lblWartosc.getText().length(); if (lblWartosc.getText().charAt(x-2) == '.' && lblWartosc.getText().charAt(x-1) == '0') lblWartosc.setText(lblWartosc.getText().substring(0, lblWartosc.getText().length()-2)); iTemp = d1; nowaLiczba = true; } } else if (command.equals("sqrt")) { d1 = d.doubleValue(); if (d1 < 0) { lblWartosc.setText("###############"); } else { d1 = Math.sqrt(d1); lblWartosc.setText(""+d1); x = lblWartosc.getText().length(); if (lblWartosc.getText().charAt(x-2) == '.' && lblWartosc.getText().charAt(x-1) == '0') lblWartosc.setText(lblWartosc.getText().substring(0, lblWartosc.getText().length() - 2)); iTemp = d1; nowaLiczba = true; } } else if (command.equals("=") && operator != '!' && !nowaLiczba) { d1 = d.doubleValue(); switch (operator) { case '+': iTemp += d1; break; case '*': iTemp *= d1; break; case '-': iTemp -= d1; break; case '/': iTemp /= d1; break; } if (d1 == 0 && operator == '/') { lblWartosc.setText("###############"); } else { lblWartosc.setText(""+iTemp); x = lblWartosc.getText().length(); if (lblWartosc.getText().charAt(x-2)=='.' && lblWartosc.getText().charAt(x-1)=='0') lblWartosc.setText(lblWartosc.getText().substring(0, lblWartosc.getText().length()-2)); } nowaLiczba = true; operator = '!'; } else if (dzialania.indexOf(command)!= -1) { if (operator != '!' && !nowaLiczba) { d1 = d.doubleValue(); switch (operator) { case '+': iTemp += d1; break; case '*': iTemp *= d1; break; case '-': iTemp -= d1; break; case '/': iTemp /= d1; break; } if (d1 == 0 && operator == '/') { lblWartosc.setText("###############"); } else { lblWartosc.setText(""+iTemp); x = lblWartosc.getText().length(); if (lblWartosc.getText().charAt(x-2) == '.' && lblWartosc.getText().charAt(x-1) == '0') lblWartosc.setText(lblWartosc.getText().substring(0, lblWartosc.getText().length()-2)); } } else if (operator == '!') { iTemp = d.doubleValue(); } operator = command.charAt(0); nowaLiczba = true; } } void ButtonSet (String sTxt, int x, int y) { Button btnX = new Button(sTxt); btnX.setFont(new Font(null, Font.BOLD, 20)); btnX.setForeground(Color.blue); btnX.setBounds(x,y,40,40); btnX.addActionListener(this); this.add(btnX); } public static void main (String args[]) { new Kalkulator(); } public void windowClosing (WindowEvent e) { System.exit(0); } public void windowClosed (WindowEvent e) { } public void windowOpened (WindowEvent e) { } public void windowIconified (WindowEvent e) { } public void windowDeiconified(WindowEvent e) { } public void windowActivated (WindowEvent e) { } public void windowDeactivated(WindowEvent e) { } } A tak wygląda uruchomiony program:
I na tym zakończymy kurs wprowadzający do programowania w Javie...
Teraz pozostaje Ci już tylko próbować własnych sił w kolejnych programach. I co ważne: miej zawsze pod ręką dokumentację. Bez niej trudno jest zapanować nad wszystkimi klasami, ich polami i metodami...
|