Calculator.java
   1 /*
   2  * Calculator.java
   3  *
   4  * Created on 8 Август 2006 г., 21:02
   5  */
   6 
   7 package rct;
   8 
   9 import javax.swing.ImageIcon;
  10 /**
  11  *
  12  * @author  roman
  13  */
  14 // Это главный класс, который назывется Calculator 
  15 // public - означает что класс доступен другим классам
  16 // class - означает что это класс а не метод или что-нибудь еще
  17 // extends javax.swing.JFrame означает что класс Calculator - это расширение класса JFrame 
  18 //        который находиться в библиотеке javax.swing
  19 // то что в голубом фоне это добавляется автоматически из Form Editor
  20 // когда тобавляешь компоненты на форму
  21 // здесь эти строки не редактируемы
  22 public class Calculator extends javax.swing.JFrame {
  23     
  24     /** Это конструктор класса Calculator, он называется также как и класс*/
  25     public Calculator() {
  26         // в теле конструктора вызывается один метод initComponents 
  27         initComponents();
  28         
  29     }   
  30     
  31     // Создаем глобальную переременную icon типа ImageIcon 
  32     // getClass() возвращает текущий класс
  33     // метод getResource берет ресурс в данном слечае картинку calc.jpg
  34     // присваиваем картинку переменной ImageIcon 
  35     // потом ниже устанавливаем иконку приложения строкой
  36     //      setIconImage(icon.getImage());
  37     private ImageIcon icon = new ImageIcon(getClass().getResource("/rct/calc.jpg"));
  38     
  39     /** Этот метод вызывается из конструктора класса
  40      * для инициализации формы.
  41      * WARNING: Do NOT modify this code. The content of this method is
  42      * always regenerated by the Form Editor.
  43      *  содержание этого метода мы рассматривать не будем
  44      *  все что здесь добавляется , добавляется когда мы добавляем 
  45      *  компоненты на форму и меняем их свойсва
  46      */
  47     // <editor-fold defaultstate="collapsed" desc=" Generated Code ">
  48     private void initComponents() {
  49         // здесь создаються все компоненты использеумые на форме
  50         buttonGroup1 = new javax.swing.ButtonGroup();
  51         popup = new javax.swing.JPopupMenu();
  52         jMenuItem2 = new javax.swing.JMenuItem();
  53         jMenuItem3 = new javax.swing.JMenuItem();
  54         LCDPanel = new javax.swing.JPanel();
  55         LCD = new javax.swing.JTextField();
  56         buttons = new javax.swing.JPanel();
  57         b1 = new javax.swing.JButton();
  58         b2 = new javax.swing.JButton();
  59         b4 = new javax.swing.JButton();
  60         b5 = new javax.swing.JButton();
  61         b7 = new javax.swing.JButton();
  62         b8 = new javax.swing.JButton();
  63         b3 = new javax.swing.JButton();
  64         b6 = new javax.swing.JButton();
  65         b9 = new javax.swing.JButton();
  66         b0 = new javax.swing.JButton();
  67         bPlus = new javax.swing.JButton();
  68         bDrob = new javax.swing.JButton();
  69         bMinus = new javax.swing.JButton();
  70         bMultiple = new javax.swing.JButton();
  71         bDot = new javax.swing.JButton();
  72         bEqual = new javax.swing.JButton();
  73         bReset = new javax.swing.JButton();
  74         bDelete = new javax.swing.JButton();
  75         bSign = new javax.swing.JButton();
  76         bKvadrat = new javax.swing.JButton();
  77         bKub = new javax.swing.JButton();
  78         bKoren = new javax.swing.JButton();
  79         LEDS = new javax.swing.JPanel();
  80         rbPlus = new javax.swing.JRadioButton();
  81         rbMinus = new javax.swing.JRadioButton();
  82         rbMultip = new javax.swing.JRadioButton();
  83         rbDrob = new javax.swing.JRadioButton();
  84         jLabel1 = new javax.swing.JLabel();
  85         jLabel2 = new javax.swing.JLabel();
  86         jLabel3 = new javax.swing.JLabel();
  87         jLabel4 = new javax.swing.JLabel();
  88         jToolBar1 = new javax.swing.JToolBar();
  89         bExit = new javax.swing.JButton();
  90         jRadioButton1 = new javax.swing.JRadioButton();
  91         // сразу делаем ее невидимой
  92         jRadioButton1.setVisible(false);
  93         bMenuButton = new javax.swing.JButton();
  94 
  95         // устанавливаем текст для элемента меню
  96         // добавляем к компоненту ActionListener
  97         // чтобы вызывался нужный метод jMenuItem2ActionPerformed
  98         // в строке popup.add(jMenuItem2); добавляем
  99         // элемент меню jMenuItem2 к меню popup
 100         jMenuItem2.setText("About");
 101         jMenuItem2.addActionListener(new java.awt.event.ActionListener() {
 102             public void actionPerformed(java.awt.event.ActionEvent evt) {
 103                 jMenuItem2ActionPerformed(evt);
 104             }
 105         });
 106 
 107         popup.add(jMenuItem2);
 108 
 109         // устанавливаем текст для элемента меню
 110         // добавляем к компоненту ActionListener
 111         // чтобы вызывался нужный метод jMenuItem3ActionPerformed
 112         // в строке popup.add(jMenuItem3);
 113         // добавляем элемент меню jMenuItem3 к меню popup
 114         jMenuItem3.setText("Exit");
 115         jMenuItem3.addActionListener(new java.awt.event.ActionListener() {
 116             public void actionPerformed(java.awt.event.ActionEvent evt) {
 117                 jMenuItem3ActionPerformed(evt);
 118             }
 119         });
 120 
 121         popup.add(jMenuItem3);
 122 
 123         setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
 124         setTitle("JavaCalculator");
 125         setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
 126         setIconImage(icon.getImage());
 127         setResizable(false);
 128         LCDPanel.setBorder(javax.swing.BorderFactory.createEtchedBorder(javax.swing.border.EtchedBorder.RAISED));
 129         LCD.setBackground(new java.awt.Color(0, 0, 0));
 130         LCD.setEditable(false);
 131         LCD.setFont(new java.awt.Font("Tahoma", 1, 12));
 132         LCD.setForeground(new java.awt.Color(51, 255, 0));
 133         LCD.setHorizontalAlignment(javax.swing.JTextField.TRAILING);
 134         LCD.setText("0");
 135 
 136         org.jdesktop.layout.GroupLayout LCDPanelLayout = new org.jdesktop.layout.GroupLayout(LCDPanel);
 137         LCDPanel.setLayout(LCDPanelLayout);
 138         LCDPanelLayout.setHorizontalGroup(
 139             LCDPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
 140             .add(LCD, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 214, Short.MAX_VALUE)
 141         );
 142         LCDPanelLayout.setVerticalGroup(
 143             LCDPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
 144             .add(LCD, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
 145         );
 146 
 147         buttons.setBorder(javax.swing.BorderFactory.createEtchedBorder(javax.swing.border.EtchedBorder.RAISED));
 148         b1.setFont(new java.awt.Font("Tahoma", 1, 12));
 149         b1.setText("1");
 150         b1.setFocusPainted(false);
 151         b1.addActionListener(new java.awt.event.ActionListener() {
 152             public void actionPerformed(java.awt.event.ActionEvent evt) {
 153                 b1ActPerf(evt);
 154             }
 155         });
 156 
 157         b2.setFont(new java.awt.Font("Tahoma", 1, 12));
 158         b2.setText("2");
 159         b2.setFocusPainted(false);
 160         b2.addActionListener(new java.awt.event.ActionListener() {
 161             public void actionPerformed(java.awt.event.ActionEvent evt) {
 162                 b2ActPerf(evt);
 163             }
 164         });
 165 
 166         b4.setFont(new java.awt.Font("Tahoma", 1, 12));
 167         b4.setText("4");
 168         b4.setFocusPainted(false);
 169         b4.addActionListener(new java.awt.event.ActionListener() {
 170             public void actionPerformed(java.awt.event.ActionEvent evt) {
 171                 b4ActPerf(evt);
 172             }
 173         });
 174 
 175         b5.setFont(new java.awt.Font("Tahoma", 1, 12));
 176         b5.setText("5");
 177         b5.setFocusPainted(false);
 178         b5.addActionListener(new java.awt.event.ActionListener() {
 179             public void actionPerformed(java.awt.event.ActionEvent evt) {
 180                 b5ActPerf(evt);
 181             }
 182         });
 183 
 184         b7.setFont(new java.awt.Font("Tahoma", 1, 12));
 185         b7.setText("7");
 186         b7.setFocusPainted(false);
 187         b7.addActionListener(new java.awt.event.ActionListener() {
 188             public void actionPerformed(java.awt.event.ActionEvent evt) {
 189                 b7ActPerf(evt);
 190             }
 191         });
 192 
 193         b8.setFont(new java.awt.Font("Tahoma", 1, 12));
 194         b8.setText("8");
 195         b8.setFocusPainted(false);
 196         b8.addActionListener(new java.awt.event.ActionListener() {
 197             public void actionPerformed(java.awt.event.ActionEvent evt) {
 198                 b8ActPerf(evt);
 199             }
 200         });
 201 
 202         b3.setFont(new java.awt.Font("Tahoma", 1, 12));
 203         b3.setText("3");
 204         b3.setFocusPainted(false);
 205         b3.addActionListener(new java.awt.event.ActionListener() {
 206             public void actionPerformed(java.awt.event.ActionEvent evt) {
 207                 b3ActPerf(evt);
 208             }
 209         });
 210 
 211         b6.setFont(new java.awt.Font("Tahoma", 1, 12));
 212         b6.setText("6");
 213         b6.setFocusPainted(false);
 214         b6.addActionListener(new java.awt.event.ActionListener() {
 215             public void actionPerformed(java.awt.event.ActionEvent evt) {
 216                 b6ActPerf(evt);
 217             }
 218         });
 219 
 220         b9.setFont(new java.awt.Font("Tahoma", 1, 12));
 221         b9.setText("9");
 222         b9.setFocusPainted(false);
 223         b9.addActionListener(new java.awt.event.ActionListener() {
 224             public void actionPerformed(java.awt.event.ActionEvent evt) {
 225                 b9ActPerf(evt);
 226             }
 227         });
 228 
 229         b0.setFont(new java.awt.Font("Tahoma", 1, 12));
 230         b0.setText("0");
 231         b0.setFocusPainted(false);
 232         b0.addActionListener(new java.awt.event.ActionListener() {
 233             public void actionPerformed(java.awt.event.ActionEvent evt) {
 234                 b0ActPerf(evt);
 235             }
 236         });
 237 
 238         bPlus.setFont(new java.awt.Font("Tahoma", 1, 12));
 239         bPlus.setText("+");
 240         bPlus.setFocusPainted(false);
 241         bPlus.addActionListener(new java.awt.event.ActionListener() {
 242             public void actionPerformed(java.awt.event.ActionEvent evt) {
 243                 bPlusActPerf(evt);
 244             }
 245         });
 246 
 247         bDrob.setFont(new java.awt.Font("Tahoma", 1, 12));
 248         bDrob.setText("/");
 249         bDrob.setFocusPainted(false);
 250         bDrob.addActionListener(new java.awt.event.ActionListener() {
 251             public void actionPerformed(java.awt.event.ActionEvent evt) {
 252                 bDrobActionPerformed(evt);
 253             }
 254         });
 255 
 256         bMinus.setFont(new java.awt.Font("Tahoma", 1, 12));
 257         bMinus.setText("-");
 258         bMinus.setFocusPainted(false);
 259         bMinus.addActionListener(new java.awt.event.ActionListener() {
 260             public void actionPerformed(java.awt.event.ActionEvent evt) {
 261                 bMinusActionPerformed(evt);
 262             }
 263         });
 264 
 265         bMultiple.setFont(new java.awt.Font("Tahoma", 1, 12));
 266         bMultiple.setText("*");
 267         bMultiple.setFocusPainted(false);
 268         bMultiple.addActionListener(new java.awt.event.ActionListener() {
 269             public void actionPerformed(java.awt.event.ActionEvent evt) {
 270                 bMultipleActionPerformed(evt);
 271             }
 272         });
 273 
 274         bDot.setFont(new java.awt.Font("Tahoma", 1, 12));
 275         bDot.setText(".");
 276         bDot.setFocusPainted(false);
 277         bDot.addActionListener(new java.awt.event.ActionListener() {
 278             public void actionPerformed(java.awt.event.ActionEvent evt) {
 279                 bDotActPerf(evt);
 280             }
 281         });
 282 
 283         bEqual.setFont(new java.awt.Font("Tahoma", 1, 12));
 284         bEqual.setText("=");
 285         bEqual.setFocusPainted(false);
 286         bEqual.addActionListener(new java.awt.event.ActionListener() {
 287             public void actionPerformed(java.awt.event.ActionEvent evt) {
 288                 bEqualActPerf(evt);
 289             }
 290         });
 291 
 292         bReset.setFont(new java.awt.Font("Tahoma", 0, 10));
 293         bReset.setText("\u0421\u0431\u0440\u043e\u0441");
 294         bReset.setFocusPainted(false);
 295         bReset.addActionListener(new java.awt.event.ActionListener() {
 296             public void actionPerformed(java.awt.event.ActionEvent evt) {
 297                 bResetActionPerformed(evt);
 298             }
 299         });
 300 
 301         bDelete.setFont(new java.awt.Font("Tahoma", 0, 10));
 302         bDelete.setText("<--");
 303         bDelete.setFocusPainted(false);
 304         bDelete.addActionListener(new java.awt.event.ActionListener() {
 305             public void actionPerformed(java.awt.event.ActionEvent evt) {
 306                 bDeleteActionPerformed(evt);
 307             }
 308         });
 309 
 310         bSign.setFont(new java.awt.Font("Tahoma", 0, 10));
 311         bSign.setText("+/-");
 312         bSign.setFocusPainted(false);
 313         bSign.addActionListener(new java.awt.event.ActionListener() {
 314             public void actionPerformed(java.awt.event.ActionEvent evt) {
 315                 bSignActionPerformed(evt);
 316             }
 317         });
 318 
 319         bKvadrat.setFont(new java.awt.Font("Tahoma", 1, 12));
 320         bKvadrat.setText("x\u00b2");
 321         bKvadrat.setFocusPainted(false);
 322         bKvadrat.addActionListener(new java.awt.event.ActionListener() {
 323             public void actionPerformed(java.awt.event.ActionEvent evt) {
 324                 bKvadratActionPerformed(evt);
 325             }
 326         });
 327 
 328         bKub.setFont(new java.awt.Font("Tahoma", 1, 12));
 329         bKub.setText("x\u00b3");
 330         bKub.setFocusPainted(false);
 331         bKub.addActionListener(new java.awt.event.ActionListener() {
 332             public void actionPerformed(java.awt.event.ActionEvent evt) {
 333                 bKubActionPerformed(evt);
 334             }
 335         });
 336 
 337         bKoren.setFont(new java.awt.Font("Tahoma", 1, 12));
 338         bKoren.setText("\u221ax");
 339         bKoren.setFocusPainted(false);
 340         bKoren.addActionListener(new java.awt.event.ActionListener() {
 341             public void actionPerformed(java.awt.event.ActionEvent evt) {
 342                 bKorenActionPerformed(evt);
 343             }
 344         });
 345 
 346         org.jdesktop.layout.GroupLayout buttonsLayout = new org.jdesktop.layout.GroupLayout(buttons);
 347         buttons.setLayout(buttonsLayout);
 348         buttonsLayout.setHorizontalGroup(
 349             buttonsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
 350             .add(buttonsLayout.createSequentialGroup()
 351                 .addContainerGap()
 352                 .add(buttonsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
 353                     .add(buttonsLayout.createSequentialGroup()
 354                         .add(b1)
 355                         .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
 356                         .add(b2)
 357                         .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
 358                         .add(b3)
 359                         .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
 360                         .add(bPlus))
 361                     .add(buttonsLayout.createSequentialGroup()
 362                         .add(b4)
 363                         .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
 364                         .add(b5)
 365                         .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
 366                         .add(b6)
 367                         .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
 368                         .add(bMinus))
 369                     .add(buttonsLayout.createSequentialGroup()
 370                         .add(buttonsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false)
 371                             .add(bDot, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
 372                             .add(b7, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
 373                         .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
 374                         .add(buttonsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false)
 375                             .add(buttonsLayout.createSequentialGroup()
 376                                 .add(b0)
 377                                 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
 378                                 .add(bEqual)
 379                                 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
 380                                 .add(bMultiple))
 381                             .add(buttonsLayout.createSequentialGroup()
 382                                 .add(b8)
 383                                 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
 384                                 .add(b9)
 385                                 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
 386                                 .add(bDrob))))
 387                     .add(buttonsLayout.createSequentialGroup()
 388                         .add(bReset, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 73, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
 389                         .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
 390                         .add(bDelete, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 57, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
 391                         .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
 392                         .add(bSign, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 52, Short.MAX_VALUE))
 393                     .add(buttonsLayout.createSequentialGroup()
 394                         .add(bKvadrat, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 64, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
 395                         .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
 396                         .add(bKub, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 56, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
 397                         .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
 398                         .add(bKoren, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 62, Short.MAX_VALUE)))
 399                 .addContainerGap())
 400         );
 401 
 402         buttonsLayout.linkSize(new java.awt.Component[] {b1, b2, b3, b4, b5, b6, b7, b8, b9, bDrob, bEqual, bMinus, bMultiple, bPlus}, org.jdesktop.layout.GroupLayout.HORIZONTAL);
 403 
 404         buttonsLayout.setVerticalGroup(
 405             buttonsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
 406             .add(buttonsLayout.createSequentialGroup()
 407                 .addContainerGap()
 408                 .add(buttonsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
 409                     .add(b1)
 410                     .add(b2)
 411                     .add(b3)
 412                     .add(bPlus))
 413                 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
 414                 .add(buttonsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
 415                     .add(b4)
 416                     .add(b5)
 417                     .add(b6)
 418                     .add(bMinus))
 419                 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
 420                 .add(buttonsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
 421                     .add(b7)
 422                     .add(b8)
 423                     .add(b9)
 424                     .add(bDrob))
 425                 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
 426                 .add(buttonsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
 427                     .add(b0)
 428                     .add(bMultiple)
 429                     .add(bDot)
 430                     .add(bEqual))
 431                 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
 432                 .add(buttonsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
 433                     .add(buttonsLayout.createSequentialGroup()
 434                         .add(buttonsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
 435                             .add(bReset)
 436                             .add(bDelete))
 437                         .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
 438                         .add(buttonsLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
 439                             .add(bKoren)
 440                             .add(bKub)
 441                             .add(bKvadrat)))
 442                     .add(bSign))
 443                 .addContainerGap(17, Short.MAX_VALUE))
 444         );
 445 
 446         LEDS.setLayout(new java.awt.GridLayout(2, 4));
 447 
 448         LEDS.setBorder(javax.swing.BorderFactory.createEtchedBorder(javax.swing.border.EtchedBorder.RAISED));
 449         buttonGroup1.add(rbPlus);
 450         rbPlus.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0));
 451         rbPlus.setEnabled(false);
 452         rbPlus.setFocusable(false);
 453         rbPlus.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
 454         rbPlus.setMargin(new java.awt.Insets(0, 0, 0, 0));
 455         LEDS.add(rbPlus);
 456 
 457         buttonGroup1.add(rbMinus);
 458         rbMinus.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0));
 459         rbMinus.setEnabled(false);
 460         rbMinus.setFocusable(false);
 461         rbMinus.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
 462         rbMinus.setMargin(new java.awt.Insets(0, 0, 0, 0));
 463         LEDS.add(rbMinus);
 464 
 465         buttonGroup1.add(rbMultip);
 466         rbMultip.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0));
 467         rbMultip.setEnabled(false);
 468         rbMultip.setFocusable(false);
 469         rbMultip.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
 470         rbMultip.setMargin(new java.awt.Insets(0, 0, 0, 0));
 471         LEDS.add(rbMultip);
 472 
 473         buttonGroup1.add(rbDrob);
 474         rbDrob.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0));
 475         rbDrob.setEnabled(false);
 476         rbDrob.setFocusable(false);
 477         rbDrob.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
 478         rbDrob.setMargin(new java.awt.Insets(0, 0, 0, 0));
 479         LEDS.add(rbDrob);
 480 
 481         jLabel1.setFont(new java.awt.Font("Tahoma", 1, 12));
 482         jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
 483         jLabel1.setText("+");
 484         LEDS.add(jLabel1);
 485 
 486         jLabel2.setFont(new java.awt.Font("Tahoma", 1, 12));
 487         jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
 488         jLabel2.setText("-");
 489         LEDS.add(jLabel2);
 490 
 491         jLabel3.setFont(new java.awt.Font("Tahoma", 1, 12));
 492         jLabel3.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
 493         jLabel3.setText("*");
 494         LEDS.add(jLabel3);
 495 
 496         jLabel4.setFont(new java.awt.Font("Tahoma", 1, 12));
 497         jLabel4.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
 498         jLabel4.setText("/");
 499         LEDS.add(jLabel4);
 500 
 501         jToolBar1.setBorder(javax.swing.BorderFactory.createEtchedBorder());
 502         jToolBar1.setFloatable(false);
 503         bExit.setFont(new java.awt.Font("MS Sans Serif", 0, 10));
 504         bExit.setText("x");
 505         bExit.setToolTipText("Exit");
 506         bExit.setBorderPainted(false);
 507         bExit.setFocusPainted(false);
 508         bExit.setMargin(new java.awt.Insets(0, 0, 0, 0));
 509         bExit.setMaximumSize(new java.awt.Dimension(13, 11));
 510         bExit.setMinimumSize(new java.awt.Dimension(13, 11));
 511         bExit.setPreferredSize(new java.awt.Dimension(13, 11));
 512         bExit.addActionListener(new java.awt.event.ActionListener() {
 513             public void actionPerformed(java.awt.event.ActionEvent evt) {
 514                 bExitActionPerformed(evt);
 515             }
 516         });
 517 
 518         jToolBar1.add(bExit);
 519 
 520         buttonGroup1.add(jRadioButton1);
 521         jRadioButton1.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0));
 522         jRadioButton1.setMargin(new java.awt.Insets(0, 0, 0, 0));
 523         jToolBar1.add(jRadioButton1);
 524 
 525         bMenuButton.setFont(new java.awt.Font("Microsoft Sans Serif", 0, 10));
 526         bMenuButton.setText("o");
 527         bMenuButton.setToolTipText("\u041c\u0435\u043d\u044e");
 528         bMenuButton.setBorderPainted(false);
 529         bMenuButton.setFocusPainted(false);
 530         bMenuButton.setMargin(new java.awt.Insets(0, 0, 0, 0));
 531         bMenuButton.setMaximumSize(new java.awt.Dimension(13, 11));
 532         bMenuButton.setMinimumSize(new java.awt.Dimension(13, 11));
 533         bMenuButton.setPreferredSize(new java.awt.Dimension(13, 11));
 534         bMenuButton.addActionListener(new java.awt.event.ActionListener() {
 535             public void actionPerformed(java.awt.event.ActionEvent evt) {
 536                 bMenuButtonActionPerformed(evt);
 537             }
 538         });
 539 
 540         jToolBar1.add(bMenuButton);
 541 
 542         org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
 543         getContentPane().setLayout(layout);
 544         layout.setHorizontalGroup(
 545             layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
 546             .add(layout.createSequentialGroup()
 547                 .addContainerGap()
 548                 .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING, false)
 549                     .add(org.jdesktop.layout.GroupLayout.LEADING, LCDPanel, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
 550                     .add(org.jdesktop.layout.GroupLayout.LEADING, LEDS, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
 551                     .add(org.jdesktop.layout.GroupLayout.LEADING, buttons, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
 552                 .addContainerGap(11, Short.MAX_VALUE))
 553             .add(jToolBar1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 239, Short.MAX_VALUE)
 554         );
 555         layout.setVerticalGroup(
 556             layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
 557             .add(layout.createSequentialGroup()
 558                 .addContainerGap()
 559                 .add(LCDPanel, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
 560                 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
 561                 .add(LEDS, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 34, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
 562                 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
 563                 .add(buttons, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
 564                 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
 565                 .add(jToolBar1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
 566         );
 567         pack();
 568     }// </editor-fold>
 569 /* методы: 
 570  *  jMenuItem2ActionPerformed
 571  *  jButton3ActionPerformed
 572  *  jMenuItem3ActionPerformed
 573  *  jMenuItem3ActionPerformed
 574  *  jButton2ActionPerformed
 575  *  bResetActionPerformed
 576  *  bMultipleActionPerformed
 577  *  bDrobActionPerformed
 578  *  bMinusActionPerformed
 579  *  bPlusActPerf
 580  *  bEqualActPerf
 581  *  b0ActPerf и так далее, те которые 
 582  *  оакнчиваются на ActionPerformed или ActPerf генерирются
 583  *  автоматически при добавлении какого-либо 
 584  *  события (Action) к компоненту. Генерируются две строчки начало и конец
 585  *  тело метода нужно писать самому
 586  *
 587  */
 588     
 589     // Метод, срабатывающий при нажатии кнопки извлечения корня
 590     // private - означает что он доступен только внутри класса
 591     // void - это тип возвращаемого значения void - значит ничего не возвращает
 592     // bKorenActionPerformed - название метода
 593     // (java.awt.event.ActionEvent evt) принимаемый аргумент
 594     // имя аргумента evt, тип аргумента ActionEvent из библиотеки java.awt.event
 595     private void bKorenActionPerformed(java.awt.event.ActionEvent evt) {                                       
 596         /*  объявляем переменную firstChar ее тип char, то есть символ
 597          *  присваеваем ей значение LCD.getText().charAt(0) где
 598          *  LCD это наш компонент типа JTextField (экран калькулятора)
 599          *  у любого компонента этого типа(JTextField) есть метод getText()
 600          *  который мы и вызываем ( LCD.getText() ) через точку
 601          *  этот метод возвращает значение типа String (строка ) 
 602          *  которое содержит то что в текстовом поле LCD
 603          *  для всех переменных типа String можно вызвать метод charAt(int idx)
 604          *  где int idx это аргумент для этого метода - значение типа int (целое число)
 605          *  в нашем случае 0. Этот метод возвращает символ (типа char , поэтому
 606          *  наша переменная имеет этот тип!) из строки порятковый номер которого
 607          *  указан в качестве аргумента этого метода, в нашем случае 0.
 608          *  нумерация символов в строке ведется с 0 то есть
 609          *  Макс: 0 - М, 1 - а, 2 - к, 3 - с (0123) последний символ под номером 3
 610          *  хотя всего длина строки Макс - 4 !!!!!!
 611          *  в нашем случае возврашается первый символ  и присваивается  
 612          *  новой созданной переменной firstChar
 613          */
 614         char firstChar = LCD.getText().charAt(0);
 615         /*  if - это проверка условия в скобках () это выражение
 616          *  истинность каторого проверяется. Если выражение истино (true) 
 617          *  то условие выполняется. У нас выражение (firstChar != '-')
 618          *  где firstChar это наша переменная, != это оператор сравнения который значает НЕ РАВНО
 619          *  ( == РАВНО, < МЕНЬШЕ, > БОЛЬШЕ, <= МЕНЬШЕ ИЛИ РАВНО, >= БОЛЬШЕ ИЛИ РАВНО)
 620          *  по другую сторону от оператора сравнения символ '-' МИНУС 
 621          *  (символы типа char в одинарных кавычках ' '
 622          *  если кавычки двойные " " то это строка типа String 
 623          *  это разные типы данных, ошибаться нельзя)
 624          *  получается в нашем случае проверяется, первый символ на LCD минус или нет?
 625          *  в фигурных скобках { } то что выполняется при выполнении условия 
 626          */
 627         if(firstChar != '-') {
 628             /*  создаем переменную displayed типа double (дробное число двойной точности
 629              *  если одинарной точности то это float, а int -это целое, не дробное число)
 630              *  и присваиваем ей значение Double.parseDouble(LCD.getText()) где
 631              *  Double - это такой специальный класс у которого есть метод
 632              *  parseDouble(аргумент) этот метод из аргумента возвращает 
 633              *  значение типа double (поэтому наша переменная displayed
 634              *  и имеет такой тип) у этого метода в качестве аргумента используется
 635              *  строка String и она должна быть текстовым выражением дробного числа
 636              *  например "55.67" или "-25.754". У нас в качестве аргумента используется
 637              *  LCD.getText() - описано выше (строка типа String содержащаяся в компоненте 
 638              *  LCD типа jTextField 
 639              */
 640             double displayed = Double.parseDouble(LCD.getText());
 641             /*  помимо метода getText() у типов jTextField есть метод
 642              *  setText(аргумент) который устанавливает значени текста
 643              *  этот метод ничего не возвращает, то есть возвращет тип void 
 644              *  аргумент должен быть строкой типа String , в нашем случае в качестве
 645              *  аргумента используется выражение Double.toString(Math.sqrt(displayed)) где
 646              *  Double - это специальный класс у которого есть метод toString(аргумент)
 647              *  он возвращает значение типа String (котрый подходит в качестве аргумента
 648              *  для метода setText) у метода toString аргумент должен иметь тип double 
 649              *  в нашем случае аргумент Math.sqrt(displayed)) где
 650              *  Math - это специальный класс содержащий математические функции (методы этого класса)
 651              *  например, в нашем случае, метод sqrt возвращающий значение типа double
 652              *  и у котрого аргумент тоже типа double. В нашем случае в качестве аргумента
 653              *  выступает переменна displayed которую мы 
 654              *  инициализировали в предыдущей строке
 655              *  Итого мы отображаем на экране калькулятора корень того что было на 
 656              *  экране, но только, если это значение не было отрицательным! 
 657              */
 658             LCD.setText(Double.toString(Math.sqrt(displayed)));
 659             /*  isSigned наша переменная, будет описана в другом месте
 660              *  здесь мы присваиваем ей значение true (истина)
 661              **/
 662             isSigned = true;
 663         }
 664     }                                      
 665      
 666     /*  метод срабатывающи при нажатии кнопки возведения в куб
 667      */
 668     private void bKubActionPerformed(java.awt.event.ActionEvent evt) {                                     
 669         /*  2 строки как и в пердыдущем методе (только там это сделано в одну)
 670          *  создание переменной dDisplayed типа double которая содержит то что отображено
 671          *  на экране калькулятроа
 672          */
 673         String displayed = LCD.getText();
 674         double dDisplayed = Double.parseDouble(displayed);
 675         /*  создаем переменную result типа double котрой 
 676          *  присавиваем значение dDisplayed * dDisplayed * dDisplayed
 677          *  то есть куб того что было отображено на экране
 678          */
 679         double result = dDisplayed * dDisplayed * dDisplayed;
 680         /*  устанавливаем значение тукста LCD в значение переменной
 681          *  result конвертируя ее в тип String 
 682          */
 683         LCD.setText(Double.toString(result));
 684         /*  isSigned наша переменная, будет описана в другом месте
 685          *  здесь мы присваиваем ей значение true (истина)
 686          **/
 687         isSigned = true;
 688     }                                    
 689     /*  то же что и предыдущий метод только 
 690      *  возведение в квадрат
 691      */
 692     private void bKvadratActionPerformed(java.awt.event.ActionEvent evt) {                                         
 693         String displayed = LCD.getText();
 694         double dDisplayed = Double.parseDouble(displayed);
 695         double result = dDisplayed * dDisplayed;
 696         LCD.setText(Double.toString(result));
 697         isSigned = true;        
 698     }                                        
 699     
 700     /*  Метод при нажатии кнопки +/- поменять знак числа на экране
 701      */
 702     private void bSignActionPerformed(java.awt.event.ActionEvent evt) {                                      
 703         // Переменная displayed типа String (строка) значение 
 704         // ее равно значению текста LCD 
 705         String displayed = LCD.getText();
 706         // Переменная firstChar типа char (символ) значение ее
 707         // символ (возвращаемый методои charAt) с индексом 0
 708         // (то есть первый) переменной displayed 
 709         char firstChar = displayed.charAt(0);
 710         // Проверяем, если первый символ (firstChar) равен '-'
 711         if(firstChar == '-') {
 712             // то выполняем следующую строку
 713             // где substring(аргумент) это метод для типов String 
 714             // который возвращает значение типа String являющееся подстрокой 
 715             // от исходной строки. В качестве аргумента испульзуется значение типа int 
 716             // которое указывет с какого номра символа возвращать подстроку
 717             // в нашем случае с номера 1, то есть со ВТОРОГО!!! символа
 718             // например "Макс".substring(1) вернет значение "акс"
 719             // в нашем примере если было напр. "-55.67" то будет "55.67""
 720             LCD.setText(displayed.substring(1));
 721         // иначе, то есть если первы символ не '-'
 722         } else {
 723             /*  тексту LCD присваиваем значение '-' + displayed
 724              *  то есть знак - и к нему преписываем то что было до этого
 725              *  следует отметить что строки (String) можно складывать друг
 726              *  с другом и с символами (char). Например
 727              *  "Ма" + "кс" получиться "Макс" или "Мак" + 'с' получиться "Макс"
 728              */
 729             LCD.setText('-' + displayed);
 730         }
 731     }                                     
 732     /*  Метод при нажатии кнопки <--  то есть удалить один символ с экрана
 733      *  как BackSpace на клавиатуре
 734      */
 735     private void bDeleteActionPerformed(java.awt.event.ActionEvent evt) {                                        
 736         /*  здесь вызывается метод length() для типа String 
 737          *  (так как LCD.getText() возвращает значение типа String )
 738          *  метод length() возвращает значение типа int которое является
 739          *  длиной строки для которой он вызывается, то есть количество
 740          *  символов в строке. Напр. "Макс".length() вернет 4
 741          *  условие если длина текста LCD не равна 1, то есть на экране 
 742          *  калькулятора не 1 символ
 743          */
 744         if(LCD.getText().length() != 1) {
 745             /*  то выполняется следующая строка, где
 746              *  LCD.setText(арг) - текст LCD установить в значение арг
 747              *  LCD.getText() - взять текст LCD 
 748              *  .substring(арг1, арг2) взять подстроку с символа номер арг1 по символ номер арг2
 749              *  то есть от символа 0 (то есть первый) до символа LCD.getText().length() - 1)
 750              *  (то есть до символа длина строки -1) например 
 751              *  "Макс".substring(0, "Макс".length() - 1) вернет "Мак"
 752              *  Примечание: так как метод length() возвращает значение типа int 
 753              *  то мы можем выполнять с ним математические операции (+, -, *, /, % и т.д.)
 754              */
 755             LCD.setText(LCD.getText().substring(0, LCD.getText().length() - 1));
 756         // иначе, то есть если на екране 1 символ, то нажав <-- на 
 757         // экране должен остаться 0
 758         } else {
 759             LCD.setText("0");
 760         }
 761         /* Итог: в этом методе хорошо бы добавить проверку на знак
 762          *  потому что если на экране -1, например, то нажав на кнопку <--
 763          *  на экране останеться один -, а должен остаться 0
 764          *  можешь попробовать сделать это сам
 765          */
 766     }                                       
 767     /*  Метод при принажатии элемента меню jMenuItem2 текст которого About
 768      *  это меню появляется при нжатии маленькой кнопки c надписью "о"
 769      *  которая находиться в самом низу справа от кнопки с крестиком (кнопка закрытия)
 770      *  Этот метод показывает диалоговое окно которое описано во втором файле проекта
 771      *  About.java там класс About
 772      */
 773     private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {                                           
 774         /* Создаем переменную ab типа About (это наш собственный класс)
 775          *  new - означает создать новый объект
 776          *  после About(арг1, арг2) - это конструктор класса About 
 777          *  то есть мы создаем переменную типа About и сразу
 778          *  инициализируес ее новым объектом этого класса
 779          *   в качестве аргументов у конструктора 1- специальное
 780          *  слово this обозначающее текущий объект, то есть класс Calculator 
 781          *  2 - true это значение 
 782          *  их смысл объясняется в файле About.java
 783          */
 784         About ab = new About(this, true);
 785         // у объектов типа About есть метод setVisible(арг) - сделать видимым
 786         // арг может быть true или false (истина или ложь)
 787         // true - сделать видимым, false - сделать НЕ видимым
 788         ab.setVisible(true);
 789     }                                          
 790     /* Метод при нажитии маленькой кнопки с крестиком в самом низу слева
 791      * закрытие приложения
 792      */
 793     private void bExitActionPerformed(java.awt.event.ActionEvent evt) {                                      
 794         // сделать текущий объект не видимым
 795         setVisible(false);
 796         // специальный метод dispose() класса java.awt.Window
 797         // убивает все компоненты из памяти, освобождает экранные ресурсы и т.п.
 798         dispose();
 799         // закрыть приложение, 0 - значит без ошибок, то есть нормальное закрытие пользователем
 800         // бывает не нормальное закрытие с аргументом не равным 0
 801         System.exit(0);
 802     }                                     
 803     // то же закрытие приложения только из меню, того же где и About
 804     private void jMenuItem3ActionPerformed(java.awt.event.ActionEvent evt) {                                           
 805         setVisible(false);
 806         dispose();
 807         System.exit(0);
 808     }                                          
 809     /*Метод при нажатии маленькой кнопки с надписью "о" справа от маленькой кнопки 
 810      *закрытия. Появляется всплывающее меню popup
 811      */
 812     private void bMenuButtonActionPerformed(java.awt.event.ActionEvent evt) {                                            
 813         // так как компонент меню popup уже создан, то его надо только показать
 814         // для этого используется метод show(арг1, арг2, арг3)
 815         // арг1 - это компонент на котором показать меню
 816         // арг2 - сдвиг меню по оси X относительно компонента в арг1
 817         // арг3 - сдвиг меню по оси Y относительно компонента в арг1
 818         // у нас в качестве арг1 наша кнопка которая и показывает меню
 819         // со сдвигом 5 по X и 5 по Y
 820         popup.show(bMenuButton, 5, 5);
 821     }                                           
 822     // метод при нажатии кнопки Сброс все наши вспомогательные 
 823     // глобальные переменные обнуляются и текст LCD устанавливается в 0
 824     // глобальнае переменные - это переменные которые создаются в классе
 825     // локальные переменные для данного метода создаются 
 826     // непосредственно в этом методе
 827     private void bResetActionPerformed(java.awt.event.ActionEvent evt) {                                       
 828         LCD.setText("0");
 829         sign = ' ';
 830         isSigned = true;
 831         val = 0;
 832         isDotted = false;
 833         jRadioButton1.setVisible(false);
 834         jRadioButton1.setSelected(true);
 835     }                                      
 836     // При нажатии кнопки умножить RadioButton rbMultip устанавливается 
 837     // выбранным с помощью метода setSelected(true) и вызывается наш
 838     // метод signPressed с аргументом * типа char 
 839     // метод описывается далее
 840     private void bMultipleActionPerformed(java.awt.event.ActionEvent evt) {                                          
 841         rbMultip.setSelected(true);
 842         signPressed('*');
 843     }                                         
 844 
 845     // При нажатии кнопки разделить RadioButton rbDrob устанавливается 
 846     // выбранным с помощью метода setSelected(true) и вызывается наш
 847     // метод signPressed с аргументом / типа char 
 848     // метод описывается далее
 849     private void bDrobActionPerformed(java.awt.event.ActionEvent evt) {                                      
 850         rbDrob.setSelected(true);
 851         signPressed('/');
 852     }                                     
 853 
 854     // При нажатии кнопки минус RadioButton rbMinus устанавливается 
 855     // выбранным с помощью метода setSelected(true) и вызывается наш
 856     // метод signPressed с аргументом - типа char 
 857     // метод описывается далее
 858     private void bMinusActionPerformed(java.awt.event.ActionEvent evt) {                                       
 859         rbMinus.setSelected(true);
 860         signPressed('-');
 861     }                                      
 862 
 863     // При нажатии кнопки плюс RadioButton rbPlus устанавливается 
 864     // выбранным с помощью метода setSelected(true) и вызывается наш
 865     // метод signPressed с аргументом + типа char 
 866     // метод описывается далее
 867     private void bPlusActPerf(java.awt.event.ActionEvent evt) {                              
 868         rbPlus.setSelected(true);
 869         signPressed('+');
 870     }                             
 871     // при нажатии кнопки = 
 872     private void bEqualActPerf(java.awt.event.ActionEvent evt) {                               
 873         // инициализируем нулем новую переменную result типа double
 874         double result = 0;
 875         // новая переменная second типа double
 876         // присваиваем ей значениее new Double(LCD.getText()).doubleValue() где
 877         // new - создать новый экземпляр
 878         // Double(арг) - конструктор спец. класса Double
 879         // в данном случае в качестве аргумента строка LCD.getText() типа String
 880         // так как конструктор класса Double возвращает значение типа Double а не double
 881         // то переводим это значение в double с помощью метода doubleValue()
 882         double second = new Double(LCD.getText()).doubleValue();
 883         /* Оператор switch (переключатель) работает собственно как переключатель
 884          *  проверяется выражение в скобках после switch и сравнивается
 885          *  поочередно с каждым из case и если текущий case удовлетворяет то 
 886          *  выполняется то что идет после него. Опреатор break служит для 
 887          *  прерывания опретора switch, то есть если какой-то case выполнился 
 888          *  то происходит выход из switch с помощью break
 889          *   Здесь у нас 
 890          *  sign наша глобальная переменная типа char (описана далее)
 891          *  result - создали выше
 892          *  val - ущу одна глобальная переменная типа double (описана далее)
 893          *  second - создали выше
 894          */
 895         switch(sign) {
 896                 case '+':
 897                     result = val + second; break;
 898                 case '-':
 899                     result = val - second; break;
 900                 case '*':
 901                     result = val * second; break;
 902                 case '/':
 903                     result = val / second; break;
 904                 case ' ':
 905                     result = val + second; break;
 906             }
 907         // вычисленное значение result в зависимости от знака sign
 908         // записываем в текст LCD конвертировав result типа double
 909         // в тип String с помощью метода toString() класса Double
 910         LCD.setText(Double.toString(result));
 911         // обнуляем наши глобальные переменные
 912         sign = ' ';
 913         isSigned = true;
 914         val = 0;
 915         isDotted = false;
 916         // jRadioButton1 это специальный RadioButton компонент 
 917         // который при создании формы делается невидимым
 918         // во время дизайна формы его можно увидеть в низу рядом 
 919         // с кнопкой закрытия. Он нужен для того чтобы убрать
 920         // выбор других RadioButton компонентов, которые находятся под 
 921         // LCD и обозначают выбранную математическую опрецию
 922         // сделав выбранным его, другие делаются не выианными
 923         // так как все эти 5 компонентов находятся в одно группе
 924         // buttonGroup1 типа ButtonGroup 
 925         jRadioButton1.setSelected(true);
 926     }                              
 927     /* Методы b0ActPerf . . . b9ActPerf срабатывают при нажатии
 928      * соответствующе цифры. В них вызывается наш метод 
 929      * digitPressed(арг) с аргументом типа int который идентифицирует 
 930      * нажатую кнопку 
 931      */
 932     private void b0ActPerf(java.awt.event.ActionEvent evt) {                           
 933         digitPressed(0);
 934     }                          
 935     /*  Метод bDotActPerf при нажати  кнопки [.] (дестичнаяя точка)
 936      */
 937     private void bDotActPerf(java.awt.event.ActionEvent evt) {                             
 938         /*  У нас есть глобальная переменная isSigned типа boolean
 939          *  переменные такого типа могут принимать только два 
 940          *  значения true (истина) или false (ложь) поэтому
 941          *  такие переменные можно использовать в качестве флага (переключателя)
 942          *  и исползовать их в качестве выражения для оператора if 
 943          *  в данном случае переменная (флаг) isSigned показывает 
 944          *  выбранна ли какая-либо математическая операция в данный момент
 945          *  то есть нажата ли была уже какая-либо из кнопок +, -, /, *
 946          *  если ее значение true то какаято была нажата, 
 947          *  если false - то нет
 948          *  Уще одна такая переменная (флаг) isDotted обозначает 
 949          *  число на экране с десятичной точкой или нет
 950          *  если true то с точкой, иначе - нет
 951          *  в условии проверяем флаг isSigned если он true то 
 952          */
 953         if(isSigned) {
 954             /*  тексту LCD присваиваем значение "0."
 955              */
 956             LCD.setText("0.");
 957             // флаг isDotted учтанавливаем в true а isSigned в false
 958             isDotted = true;
 959             isSigned = false;
 960         // иначе, то есть isSigned - false то 
 961         } else {
 962             // провераем флаг isDotted, но его обратное значение
 963             // о чем говорит опреатор ! ([воскл. знак] называется НЕ) перед флагом
 964             // (его можно использовать в любом случае, не только с флагом
 965             // напр. if(!(a > b)) здесь сначала проверяется a > b, а потом берется обратное 
 966             // значение, что аналогично записи if(a < b) )
 967             // в нашем случае условие будет звучать так
 968             // если нет точки, то 
 969             if(!isDotted) {
 970                 // к тексту LCD добавляем точку "."
 971                 LCD.setText(LCD.getText() + ".");
 972                 // и устанавливаем наши флаги
 973                 // тепер мы с точкой
 974                 isDotted = true;
 975                 // и никакой знак не нажат
 976                 isSigned = false;
 977             }
 978         }
 979         /*  По русски описание работы метода звучит так:
 980          *  При нажатии кнопки [.] если выбрана какая-либо математическая операция,
 981          *  сразу после нажати кнопок [+], [-], [/], [*], [=] и т.п. 
 982          *  то есть ми набираем второе число в наших рассчетах, то на экране появиться
 983          *  значение "0.", иначе,то есть если не выбрана никакая мат. операция
 984          *  и мы продолжаем набирать первое число и хотим к нему добавить десятичную точку,
 985          *  то если еще нет в числе точки, то мы добавляем точку, иначе, то есть 
 986          *  точка уже есть - ничего не происходит
 987          */
 988     }                            
 989 
 990     private void b9ActPerf(java.awt.event.ActionEvent evt) {                           
 991         digitPressed(9);
 992     }                          
 993 
 994     private void b8ActPerf(java.awt.event.ActionEvent evt) {                           
 995         digitPressed(8);
 996     }                          
 997 
 998     private void b7ActPerf(java.awt.event.ActionEvent evt) {                           
 999         digitPressed(7);
1000     }                          
1001 
1002     private void b6ActPerf(java.awt.event.ActionEvent evt) {                           
1003         digitPressed(6);
1004     }                          
1005 
1006     private void b5ActPerf(java.awt.event.ActionEvent evt) {                           
1007         digitPressed(5);
1008     }                          
1009 
1010     private void b4ActPerf(java.awt.event.ActionEvent evt) {                           
1011         digitPressed(4);
1012     }                          
1013 
1014     private void b3ActPerf(java.awt.event.ActionEvent evt) {                           
1015         digitPressed(3);
1016     }                          
1017 
1018     private void b2ActPerf(java.awt.event.ActionEvent evt) {                           
1019         digitPressed(2);
1020     }                          
1021 
1022     private void b1ActPerf(java.awt.event.ActionEvent evt) {                           
1023         digitPressed(1);
1024     }                          
1025     
1026     /**
1027      * @param args the command line arguments
1028      * это главная фенкция (метод) в классе с которой
1029      *  начинается запуск приложения
1030      *  в ней создается новый экземпляр нашего класса Calculator 
1031      *  и устанавливается его видимость, то есть он становиться видимым
1032      *  во время создания нового экземпляра класса вызывается его конструктор
1033      *  котрый вызывает метод initComponents в котором создаются 
1034      *  все остальные компоненты и проч.
1035      */
1036     public static void main(String args[]) {
1037         java.awt.EventQueue.invokeLater(new Runnable() {
1038             public void run() {
1039                 new Calculator().setVisible(true);
1040             }
1041         });
1042     }
1043         // Далее идут наши глобальные переменные и наши методы класса Calculator 
1044         
1045         // Флаги isSigned и isDotted описаны выше
1046         // private - означает что они не доступны из др. классов
1047         // и не доступны из дочерних классов
1048         private boolean isSigned = true;
1049         private boolean isDotted = false;
1050         
1051         // переменная sign типа char с начальным значением ' ' (пробел) 
1052         // обозначает текущую мат. операцию (+, -, / или *)
1053         private char sign = ' ';
1054         // переменная val типа double с начальным значением 0
1055         // в нее записывается первое число нашей опреации 
1056         // так называемый буфер. Если мы хотим посчитать выраженине 
1057         // 20*2 то сначала набираем 20, затем нажимаем кнопку [*],
1058         // в этот момент isSigned станет true, sign станет '*',
1059         // а val станет 20, на экране останеться 20 
1060         // RadioButton rbMultip станет выбранным, показывая нам
1061         // что текущая мат опреация умножение, потом набираем 2
1062         // на экране будет 2. Нажав какую-либо из кнопок
1063         // [+], [-], [/], [*] или [=] бует произведено вычисление 
1064         // и на экране появиться результат операции
1065         private double val = 0;
1066         
1067         /*  Метод signPressed(арг) вызывается см. выше
1068          *  аргумент типа char обозначающий текущую мат. операцию
1069          */
1070         private void signPressed(char _sign) {
1071             // переменная result типа double
1072             double result = 0;
1073             // переменная second аналогично в методе bEqualActPerf см. выше
1074             double second = new Double(LCD.getText()).doubleValue();
1075             // аналогично в методе bEqualActPerf см. выше
1076             switch(sign) {
1077                 case '+':
1078                     result = val + second; break;
1079                 case '-':
1080                     result = val - second; break;
1081                 case '*':
1082                     result = val * second; break;
1083                 case '/':
1084                     result = val / second; break;
1085                 case ' ':
1086                     result = val + second; break;
1087             }
1088             // переменной val присваиваем вычесленное значение result 
1089             val = result;
1090             // на LCD отображаем вычисленное значение result 
1091             // конвертировав в String методом toString класса Double
1092             LCD.setText(Double.toString(result));
1093             // глобальной переменной sign присваиваем значение 
1094             // аргумента _sign метода signPressed
1095             sign = _sign;
1096             // присваиваем значения флагов
1097             isSigned = true;
1098             isDotted = false;
1099         }
1100 
1101         /*  Метод digitPressed срабатывает см. выше
1102          *  аргумент типа int. Вызывается из методов при нажатии
1103          *  цифровой кнопки [0] . . . [9]
1104          *  особенность 1: при нажатии кнопки мы либо продолжаем
1105          *  набирать текущее число, либо начинаем набирать
1106          *  второе новое число
1107          *  особенность 2: 0 до запятой может быть только один, но если
1108          *  0 после другой цифры, то их может быть много 
1109          */
1110         private void digitPressed(int _digit) {
1111             // если нажата кнопка ноль
1112             if(_digit == 0) {
1113                 // если на LCD НЕ только ноль "0" (о НЕ говорит оператор ! )
1114                 // у типа String есть метод equals что аналогично ==
1115                 // напр. if( "Макс" == "Рома") аналогично
1116                 //  if("Макс".equals("Рома")
1117                 if(!LCD.getText().equals("0")) {
1118                     // если выбранна какая-либо мат. опреция
1119                     // то есть мыначинаем набирать второе (новое) число
1120                     if(isSigned) {
1121                         // отобразим на LCD _digit конвертируемый в String 
1122                         // с помощью метода toString класса Integer 
1123                         // так как это у нас выполняется только для НОЛЯ
1124                         // то эту строку можно заменить строкой
1125                         //       LCD.setText("0");
1126                         LCD.setText(Integer.toString(_digit));
1127                     // иначе , если не выбрана никакая мат. операция
1128                     // то есть мы продолжаем набирать из цифр наше число
1129                     } else {
1130                         // отобразим на LCD текущее значение LCD плюс добавим
1131                         // в конце _digit конв. в String с пом. toString 
1132                         // так как все это у нас только для НОЛЯ
1133                         // то строку можно заменить строкой
1134                         //     LCD.setText(LCD.getText() + "0");
1135                         LCD.setText(LCD.getText() + Integer.toString(_digit));
1136                     }
1137                 // иначе, если на LCD ТОЛЬКО ноль  
1138                 } else {
1139                     // на LCD останеться ноль, см. особенность 2
1140                     LCD.setText("0");
1141                     // знак никакой не нажат
1142                     isSigned = false;
1143                 }
1144             // иначе , то есть нажата кнопка не ноль
1145             } else {
1146                 // если выбранна какая-либо мат. опреция
1147                 // то есть мыначинаем набирать второе (новое) число
1148                 if(isSigned) {
1149                     // отобразим на LCD _digit конвертируемый в String 
1150                     // с помощью метода toString класса Integer 
1151                     LCD.setText(Integer.toString(_digit));
1152                     // никакая операция не выбрана , так как начали набирать новое число
1153                     isSigned = false;
1154                 // иначе , если не выбрана никакая мат. операция
1155                 // то есть мы продолжаем набирать из цифр наше число
1156                 } else {
1157                     // если на LCD НЕ только один ноль 
1158                     if(!LCD.getText().equals("0")) {
1159                         // то к тексту LCD добавляем _digit 
1160                         LCD.setText(LCD.getText() + Integer.toString(_digit));
1161                     // иначе если только ноль на LCD 
1162                     } else {
1163                         // вместо него на LCD будет _digit 
1164                         LCD.setText(Integer.toString(_digit));
1165                     }
1166                 }
1167             }
1168         }
1169     // далее объявление переменных сгенерированное при дезайне формы
1170     // Variables declaration - do not modify
1171     private javax.swing.JTextField LCD;
1172     private javax.swing.JPanel LCDPanel;
1173     private javax.swing.JPanel LEDS;
1174     private javax.swing.JButton b0;
1175     private javax.swing.JButton b1;
1176     private javax.swing.JButton b2;
1177     private javax.swing.JButton b3;
1178     private javax.swing.JButton b4;
1179     private javax.swing.JButton b5;
1180     private javax.swing.JButton b6;
1181     private javax.swing.JButton b7;
1182     private javax.swing.JButton b8;
1183     private javax.swing.JButton b9;
1184     private javax.swing.JButton bDelete;
1185     private javax.swing.JButton bDot;
1186     private javax.swing.JButton bDrob;
1187     private javax.swing.JButton bEqual;
1188     private javax.swing.JButton bExit;
1189     private javax.swing.JButton bKoren;
1190     private javax.swing.JButton bKub;
1191     private javax.swing.JButton bKvadrat;
1192     private javax.swing.JButton bMenuButton;
1193     private javax.swing.JButton bMinus;
1194     private javax.swing.JButton bMultiple;
1195     private javax.swing.JButton bPlus;
1196     private javax.swing.JButton bReset;
1197     private javax.swing.JButton bSign;
1198     private javax.swing.ButtonGroup buttonGroup1;
1199     private javax.swing.JPanel buttons;
1200     private javax.swing.JLabel jLabel1;
1201     private javax.swing.JLabel jLabel2;
1202     private javax.swing.JLabel jLabel3;
1203     private javax.swing.JLabel jLabel4;
1204     private javax.swing.JMenuItem jMenuItem2;
1205     private javax.swing.JMenuItem jMenuItem3;
1206     private javax.swing.JRadioButton jRadioButton1;
1207     private javax.swing.JToolBar jToolBar1;
1208     private javax.swing.JPopupMenu popup;
1209     private javax.swing.JRadioButton rbDrob;
1210     private javax.swing.JRadioButton rbMinus;
1211     private javax.swing.JRadioButton rbMultip;
1212     private javax.swing.JRadioButton rbPlus;
1213     // End of variables declaration
1214     
1215 } // здесь заканчивается класс Calculator 
1216 

Hosted by uCoz