JtextField变量抓取和用于GUI的数值迭代

时间:2015-02-15 14:00:43

标签: return actionlistener jtextfield actionevent

这是我的一个小gui的完整代码,用于从用户获取变量并将它们返回到程序的其余部分(r.o.p)进行计算,但是似乎没有传递给r.o.p.并且没有观察到输出文件。

我们非常感谢任何帮助,我认为问题出在Draw New Graph命令的监听器上。感谢

代码:

    import java.text.*;
    import java.io.*;
    import java.util.*;

    import javax.swing.*;

    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;

    public class RungeKutta {

        // class to create slider and window

        private static File file1;

        public static double A(double v, double x, double wc, double beta) {
            return (-2 * beta * v - (Math.pow(wc, 2)) * Math.sin(x));
        }

        public static File getFile1() {
            return file1;
        }

        public static void setFile1(File file1) {
            RungeKutta.file1 = file1;
        }

        public static void main(String[] argv) throws IOException, ParseException {


            createAndShowGUI();

        }

        private static void createAndShowGUI() {
            //create and set up the window.
            JFrame frame = new JFrame("RungeKutta");
            GridLayout first = new GridLayout(14,1);
            frame.setLayout(first);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            //Create, name and Populate TextField   
            JTextField PL = new JTextField("Pendulum Length", 20);
            //Set TextField to Uneditable. Each will have Empty Field Below For Variables   
            PL.setEditable(false);  
            //Set Textfield for user entered dat
            JTextField PLv = new JTextField();
            //Allow input from text field to be taken


            JTextField AD = new JTextField("Angular Displacement", 20);
            AD.setEditable(false);
                JTextField ADv = new JTextField();

            JTextField AV = new JTextField("Angular Velocity", 20);
            AV.setEditable(false);
            JTextField Avv = new JTextField();

            JTextField TS= new JTextField("Time Steps", 20);
            TS.setEditable(false);
            JTextField TSv = new JTextField();

            JTextField MT = new JTextField("Max Time", 20);
            MT.setEditable(false);
            JTextField MTv = new JTextField();

            JTextField V = new JTextField("Viscosity (0-1)", 20);
            V.setEditable(false);
            JTextField Vv = new JTextField();

            //Create Button to Restart and Button to take in Values for usage






        JLabel emptyLabel = new JLabel("");
        emptyLabel.setPreferredSize(new Dimension(600,500));
        frame.getContentPane().add(PL, first);
        frame.getContentPane().add(PLv, first);
        frame.getContentPane().add(AD, first);
        frame.getContentPane().add(ADv, first);
        frame.getContentPane().add(AV, first);
        frame.getContentPane().add(Avv, first);
        frame.getContentPane().add(TS, first);
        frame.getContentPane().add(TSv, first);
        frame.getContentPane().add(MT, first);
        frame.getContentPane().add(MTv, first);
        frame.getContentPane().add(V, first);
        frame.getContentPane().add(Vv, first);
        JButton BNewGraph = new JButton("Draw New Graph"); //Button to restart entire drawing process
        frame.getContentPane().add(BNewGraph, first);
        //display the window
        frame.pack();
        frame.setVisible(true);

        class intakegui implements ActionListener
        {

            public intakegui()
            {
                    BNewGraph.addActionListener((ActionListener) this);
                    BNewGraph.setActionCommand("Click to Draw");               
            }

            @Override
            public void actionPerformed(ActionEvent e) {

             double l = Double.parseDouble(PLv.getText());
             double xi = Double.parseDouble(ADv.getText());
             double vi = Double.parseDouble(Avv.getText());
             double dt = Double.parseDouble(TSv.getText());
             double n = Double.parseDouble(MTv.getText());
             double beta = Double.parseDouble(Vv.getText());



            SimpleDateFormat dform = new SimpleDateFormat("ddMMyyyysmH");
            Date d = Calendar.getInstance().getTime();
            String dstr = dform.format(d);
            String filename = ("result " + dstr + ".txt");
            file1 = new File(filename);
            PrintWriter savedValues = null;
            try {
                savedValues = new PrintWriter(filename);
            } catch (FileNotFoundException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }

            //declare variable for gravity and omega*c
            double g = 9.8;
            double wc = Math.sqrt(g / l);
            savedValues.println("#Initial Values Entered");
            savedValues.println("#" + l + "," + vi + "," + xi + "," + dt + "," + n
                    + "," + beta);
            double[] dispTime = new double[(int) n];
            double[] velTime = new double[(int) n];

            // let a = angular acceleration

            for (double j = 0; j < (int) n; j++) {
                // int time = 1;
                double k1v = dt * j * A(vi, xi, wc, beta);
                double k1x = dt * j * vi;

                double k2v = dt * j * A(vi, xi + (0.5 * k1x), wc, beta);
                double k2x = dt * j * (vi + (0.5 * k1v));

                double k3v = dt * j * A(vi, xi + (0.5 * k2x), wc, beta);
                double k3x = dt * j * (vi + (0.5 * k2v));

                double k4v = dt * j * A(vi, xi + k3x, wc, beta);
                double k4x = dt * j * (vi + k3v);

                xi += k1x / 6 + k2x / 3 + k3x / 3 + k4x / 6;
                vi += k1v / 6 + k2v / 3 + k3v / 3 + k4v / 6;

                dispTime[(int) j] = xi;
                velTime[(int) j] = vi;
                System.out.println(xi + "," + vi);
            }

            for (int i = 0; i < (int) n; i++) {
                savedValues.println(dispTime[i] + " " + velTime[i]);
            }
            savedValues.close();
            System.out.println("File saved. File name: " + filename);

            }   
        }   
            }

        }

1 个答案:

答案 0 :(得分:0)

您忘记将按钮添加到按钮中。你需要添加如下的监听器:

BNewGraph.addActionListener(new intakegui());

现在,当用户点击按钮时,您会看到该文件。