⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calframe.java

📁 Calculator:可以计算各种基础表达式的计算器,比如3x+5x^2(x=3)
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        pack();
    }// </editor-fold>                        

    private void Domain1ActionPerformed(java.awt.event.ActionEvent evt) {                                        
        // Domain1:
}                                       

    private void ParameterActionPerformed(java.awt.event.ActionEvent evt) {                                          
        // Parameter:
        parameter = this.Parameter.getText();
}                                         

    private void GenerateActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // Generate:
        double result = 0.0;
        String output = "";
        expression = new Evaluation(this.Expression.getText());
        //Evaluation temp = expression;
        try {
            result = expression.Evaluate();
            var = expression.showVar();
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "The input is invalid",
                    "warning", JOptionPane.WARNING_MESSAGE);
            return;
        }
        if (var.size() == 0) {
            JOptionPane.showMessageDialog(null, "There is no variable\n" + "The result is " + result,
                    "warning", JOptionPane.WARNING_MESSAGE);
        } else {
            //System.out.print(var);
            for (int i = 0; i < var.size(); i++) {
                if (!var.get(i).equals(parameter)) {
                    output += "(" + var.get(i) + "=  )";
                }
            }
            this.VarSet.setText(output);
        }
}                                        

    private void DrawActionPerformed(java.awt.event.ActionEvent evt) {                                     
        // Draw:
        if ((startPoint - endPoint) >= 0) {
            JOptionPane.showMessageDialog(null, "The domain is in valid",
                    "warning", JOptionPane.WARNING_MESSAGE);
            return;
        }

        g = this.GraphArea.getGraphics();
        paintComponents(g);
}                                    

    private void Domain2ActionPerformed(java.awt.event.ActionEvent evt) {                                        
        // Domain2:
}                                       

    private void ExpressionActionPerformed(java.awt.event.ActionEvent evt) {                                           
        // Expression:
}                                          

    private void ParameterFocusLost(java.awt.event.FocusEvent evt) {                                    
        // TODO add your handling code here:
        parameter = this.Parameter.getText();
    }                                   

    private void Domain1FocusLost(java.awt.event.FocusEvent evt) {                                  
        // TODO add your handling code here:
        try {
            startPoint = Double.parseDouble(this.Domain1.getText());
        } catch (NumberFormatException e) {
            JOptionPane.showMessageDialog(null, "The domain is in valid",
                    "warning", JOptionPane.WARNING_MESSAGE);
            this.Domain1.setText("");
            return;
        }
    }                                 

    private void Domain2FocusLost(java.awt.event.FocusEvent evt) {                                  
        // TODO add your handling code here:
        try {
            endPoint = Double.parseDouble(this.Domain2.getText());
        } catch (NumberFormatException e) {
            JOptionPane.showMessageDialog(null, "The domain is in valid",
                    "warning", JOptionPane.WARNING_MESSAGE);
            return;
        }
    }                                 

    private void ExpressionFocusGained(java.awt.event.FocusEvent evt) {                                       
        // TODO add your handling code here:
//        this.Expression.setText("");
//        this.Parameter.setText("");
//        this.VarSet.setText("");
//        this.Domain1.setText("");
//        this.Domain2.setText("");
    }                                      

    private void ExpressionFocusLost(java.awt.event.FocusEvent evt) {                                     
        // TODO add your handling code here:
        expression = new Evaluation(this.Expression.getText());
    }                                    

    private void VarSetActionPerformed(java.awt.event.ActionEvent evt) {                                       
        // TODO add your handling code here:\
}                                      

    private void VarSetFocusLost(java.awt.event.FocusEvent evt) {                                 
        // TODO add your handling code here:
        Vector<String> vc = new Vector();
        String input = this.VarSet.getText();
        StringTokenizer token = new StringTokenizer(input, "()= ", false);
        while (token.hasMoreTokens()) {
            vc.add(token.nextToken());
        }
        if (vc.size() % 2 == 1) {
            JOptionPane.showMessageDialog(null, "The Variable Set is invalid",
                    "warning", JOptionPane.WARNING_MESSAGE);
            return;
        } else {
            try {
                for (int i = 0; i < vc.size() - 1; i += 2) {
                    expression.getArgSet().setArg((String) vc.get(i), Double.parseDouble((String) vc.get(i + 1)));
                    System.out.print(expression.getArgSet().getArg((String) vc.get(i)));
                }
            } catch (NumberFormatException e) {
                JOptionPane.showMessageDialog(null, "The Variable Set is invalid",
                        "warning", JOptionPane.WARNING_MESSAGE);
                return;
            }

        }
    }                                

    /**
    * @param args the command line arguments    */

    @Override
    public void paintComponents(Graphics g) {
        super.paintComponents(g);

        this.GraphArea.paint(g);
        int xCenter = this.GraphArea.getWidth() / 2;
        int yCenter = this.GraphArea.getHeight() / 2;

        g.drawLine(10, yCenter, xCenter*2 - 10, yCenter);

        g.drawString("(0,0)", xCenter, yCenter);

        g.drawLine(xCenter*2 - 10, yCenter, xCenter*2 - 15, yCenter + 5);
        g.drawLine(xCenter*2 - 10, yCenter, xCenter*2 - 15, yCenter - 5);

        g.drawLine(xCenter, 10, xCenter, yCenter*2 - 10);

        g.drawLine(xCenter, 10, xCenter + 5, 15);
        g.drawLine(xCenter, 10, xCenter - 5, 15);

        double range1 = this.getRange(startPoint);
        double range2 = this.getRange(endPoint);

        double rangeX = Math.max(Math.abs(startPoint), Math.abs(endPoint));
        double rangeY = Math.max(Math.abs(range1), Math.abs(range2));
        for (int i = 0; i < 5000; i++) {
            rangeY = Math.max(rangeY, Math.abs(getRange(startPoint + i * (endPoint - startPoint)/4999)));
        }

        g.drawLine(xCenter, 10, xCenter + 5, 15);

        g.drawString(""+startPoint , (int)(xCenter + startPoint/rangeX*(xCenter-20)) , yCenter+10 );
        g.drawLine((int)(xCenter + startPoint/rangeX*(xCenter-20)) , yCenter , (int)(xCenter + startPoint/rangeX*(xCenter-20)), yCenter-5);

        g.drawString(""+endPoint , (int)(xCenter + endPoint/rangeX*(xCenter-20)),yCenter+10);
        g.drawLine((int)(xCenter + endPoint/rangeX*(xCenter-20)) , yCenter , (int)(xCenter + endPoint/rangeX*(xCenter-20)), yCenter-5);

        g.drawString(""+ format(getRange(startPoint)) , xCenter-20 , (int)(yCenter-getRange(startPoint/rangeY * (yCenter-20))));
        g.drawLine( xCenter , (int)(yCenter-getRange(startPoint)/rangeY * (yCenter-20)) ,
                xCenter+5,(int)(yCenter-getRange(startPoint)/rangeY * (yCenter-20)));

        g.drawString(""+ format(getRange(endPoint))  , xCenter-20 , (int)(yCenter-getRange(endPoint)/rangeY * (yCenter-20)));
        g.drawLine( xCenter , (int)(yCenter-getRange(endPoint)/rangeY * (yCenter-20)) , 
                xCenter+5,(int)(yCenter-getRange(endPoint)/rangeY * (yCenter-20)));

        g.drawString(""+ format(rangeY),xCenter-20 , 20);
        g.drawLine( xCenter , 20 , xCenter+15, 20 );

        g.drawString(""+ format(-rangeY),xCenter-20 , yCenter*2-40);
        g.drawLine( xCenter , yCenter*2-40 , xCenter+15,  yCenter*2-40 );



        int[] x = new int[5000];
        int[] y = new int[5000];
        for (int i = 0; i < 5000; i++) {
            x[i] = (int) (xCenter + (startPoint + i * (endPoint - startPoint) / 4999.0) / rangeX * (xCenter-20));
        }

        for (int i = 0; i < 5000; i++) {
            y[i] = (int) (yCenter -  getRange(startPoint + i * (endPoint - startPoint) / 4999.0) / rangeY * (yCenter-20));
        }
        g.drawPolyline(x, y, 5000);
    //g.drawPolyline(p.xpoints , p.ypoints, p.npoints);

    }
    private double format(double x){
        double i = (int)(x*100);
        return i/100;
    }
     private double getRange(double value) {
        try {
            expression.getArgSet().setArg(parameter, value);
           // System.out.println(expression.getArg().getArg(parameter));
           // System.out.println(expression.Evaluate());
            return expression.Evaluate();
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "There is an error occuring when evaluating",
              "warning", JOptionPane.WARNING_MESSAGE);
        }
        return 0.0;
    }
 

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new CalFrame().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JTextField Domain1;
    private javax.swing.JTextField Domain2;
    private javax.swing.JButton Draw;
    private javax.swing.JTextField Expression;
    private javax.swing.JButton Generate;
    private javax.swing.JPanel GraphArea;
    private javax.swing.JTextField Parameter;
    private javax.swing.JTextField VarSet;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JPanel jPanel2;
    // End of variables declaration                   

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -